我是pl/sql块的新手。。我的程序中有一个要求如下:
我有一个静态数据表tb_calender
,它具有DATE
类型的列extract_date
。想要检查当前系统日期是否存在于表tb_calender.extract_date
中。如果不存在,则退出进程并记录错误。
请对此提出建议。
函数可能更合适(这样您就可以让调用者知道表中是否存在今天的日期(。您可以返回一个布尔值,例如一个数字(这更简单,因为您可以在SQL中使用它,而布尔值仅在PL/SQL中有效(。
您可能不想检查sysdate
本身,因为它包含日期和时间组件(最多为秒(,所以。。。该表现在包含与匹配的值的可能性有多大?这就是我使用TRUNC
函数的原因。
设置:
SQL> alter session set nls_date_Format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select * from tb_calender;
EXTRACT_DATE
-------------------
10.01.2022 00:00:00 --> that's today's date
08.01.2022 00:00:00
SQL> select sysdate from dual;
SYSDATE
-------------------
10.01.2022 20:34:42
功能:
SQL> create or replace function f_test_01
2 return number
3 is
4 /* Return 1 if EXTRACT_DATE which is equal to today's date exists.
5 Return 0 otherwise
6 */
7 l_cnt number;
8 begin
9 select count(*)
10 into l_cnt
11 from tb_calender
12 where extract_date = trunc(sysdate);
13
14 return case when l_cnt = 0 then 0
15 else 1
16 end;
17 end f_test_01;
18 /
Function created.
SQL> select f_test_01 from dual;
F_TEST_01
----------
1
程序:
SQL> create or replace procedure p_test
2 is
3 l_cnt number;
4 begin
5 select count(*)
6 into l_cnt
7 from tb_calender
8 where extract_date = trunc(sysdate);
9
10 if l_cnt = 0 then
11 dbms_output.put_line('Today''s date does not exist');
12 else
13 dbms_output.put_line('Today''s date exists');
14 end if;
15 end;
16 /
Procedure created.
SQL> set serveroutput on
SQL> exec p_test;
Today's date exists
PL/SQL procedure successfully completed.
SQL>