2011-01-10 3 views
0

У меня есть праздничный стол, описание которого являютсяOracle: Устранить ошибку

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); 

Я получаю ошибку, как это.

ОШИБКА в строке 2: ОРА-06550: линия 2, колонка 1: PLS-00103: Встречающиеся символ, когда ожидает одно из следующих действий «SELECT»: начинают использовать тип функции пакета прагма процедура подтипа форма текущий курсор

Может ли кто-нибудь сказать мне, в чем проблема в моем коде?

ответ

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

Но это, вероятно, даст вам новую ошибку (не найдено никаких данных), потому что, вероятно, нет записи, что имеет Sysdate вошел в 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 return NULL.

Единственная ошибка, которую вы можете получить сейчас, это когда есть несколько записей, содержащих одну и ту же дату.

+2

+1: Это анонимный блок PLSQL, обозначаемый ключевыми словами 'BEGIN' и' END'. –

+0

Да, это так. Должен был упомянуть об этом, спасибо. – GolezTrol

+0

Как выполнить указанный выше запрос? Я запустил его в sql plus, и я получил результат, когда PL/sql успешно завершил. Но он не показывает никакого вывода. –

Смежные вопросы