Как мне получить все записи с падением дня рождения сегодня в oracle
Я получаю синтаксическую ошибку с хранимой процедурой PL/SQL :
Errors: check compiler log Error starting at line : 1 in command - exec GET_BIRTHDAYS Error report - ORA-06550: line 1, column 7: PLS-00905: object SYS.GET_BIRTHDAYS is invalid ORA-06550: line 1, column 7: PL/SQL: Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
Требование состоит в том, чтобы запросить таблицу Oracle для всех записей, где день рождения клиента приходится на сегодняшний день, то есть на текущую дату. Для всех возвращенных строк я затем хочу захватить соответствующий адрес электронной почты, а затем использовать его в другом месте моего приложения.
Это моя хранимая процедура :
create or replace PROCEDURE GET_BIRTHDAYS(returned_Email OUT VARCHAR2) AS DECLARE currentSystemDate VARCHAR2(128 Byte); DECLARE custBirthday VARCHAR2(128 Byte); DECLARE custEmail VARCHAR2(128 Byte); BEGIN SELECT into currentSystemDate TO_CHAR(SYSDATE,'DD-MON') FROM dual SELECT INTO custBirthday to_char(DATE_OF_BIRTH,'DD-MON') FROM STTM_CUST_PERSONAL WHERE DATE_OF_BIRTH=currentSystemDate SELECT INTO custEmail E_MAIL FROM STTM_CUST_PERSONAL WHERE DATE_OF_BIRTH=custBirthday returned_Email:= custEmail END GET_BIRTHDAYS;
Просто для ясности в таблице
STTM_CUST_PERSONALDATE_OF_BIRTH хранится как 16 июля 2020 года, 13 марта 1964 года и т.д.
Что я упускаю?
Это мой первый раз, когда я создаю хранимые процедуры с базой данных Oracle, и я думаю, что есть некоторые тонкие вещи, которые мне не хватает.
Что я уже пробовал:
Синтаксическая ошибка всплывает именно в строке :
DECLARE currentSystemDate VARCHAR2(128 Byte);для объявления типа данных.
Я уже проверил с помощью отдельных запросов, что я могу сегодняшнюю дату с :
SELECT TO_CHAR(SYSDATE,'DD-MON') FROM dual
и я могу получить компонент даты сравнения из первичной таблицы с помощью :
SELECT to_char(DATE_OF_BIRTH,'DD-MON') FROM STTM_CUST_PERSONAL
0x01AA
Разве это не так
...
DECLARE
currentSystemDate VARCHAR2(128 Byte);
custBirthday VARCHAR2(128 Byte);
custEmail VARCHAR2(128 Byte);
...
Richard MacCutchan
Это может быть то ответ.
0x01AA
Чем больше документальных фильмов о oracle я читаю, тем больше запутываюсь. Я уже не так уверен, что это проблема :-)
Richard MacCutchan
Я не смог найти ничего полезного в документации Oracle, но я видел некоторые примеры в ответах на SO.