检查静态表中的当前系统日期



我是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>

最新更新