2011-01-10 403 views
0

我有假期表,其描述是甲骨文:消除错误

Name          Null? Type 

HOLIDAYDATE          DATE 
DESCRIPTION          VARCHAR2(20) 

包含数据

HOLIDAYDA DESCRIPTION 
--------- -------------------- 
19-JAN-11 to 
17-JAN-11 to 
10-JAN-11 a 

这里是我的代码:

DECLARE a date; 
SELECT holidaydate 
    INTO a 
    FROM holiday 
WHERE holidaydate = SYSDATE; 
DBMS_OUTPUT.PUT_LINE(a); 

我收到这样的错误。 ORA-06550::行2,列1: PLS-00103:

在第2行ERROR出现符号 “SELECT” 在需要下列之一时: 开始功能包编译程序亚型类型使用 形式 当前光标

任何人都可以告诉我什么是我的代码中的问题?

回答

4
declare 
    a date; 
begin 
    select holidaydate into a from holiday where holidaydate = sysdate; 
    dbms_output.put_line(a); 
end; 

但是,这可能会给你一个新的错误(没有找到数据),因为有可能是没有任何记录表明有系统日期中Holidaydate进入,因为SYSDATE包括时间为好。

那么试试这个:

declare 
    a date; 
begin 
    select 
    (select holidaydate from holiday where holidaydate = trunc(sysdate)) 
    into a 
    from dual; 

    dbms_output.put_line(a); 
end; 

这将切断部分时间,检查日期整。如果你的表中还有整个日期,那么这很可能会给出结果。如果不是,则从双选中捕获该数据,并使a返回NULL。

您现在可能得到的唯一错误是当有多个记录包含相同的日期。

+2

+1:这被称为匿名PLSQL块,由'BEGIN`和`END`关键字表示。 – 2011-01-10 06:47:12