Ошибка при вызове sql из сценария оболочки unix

#unix #oracle11g

#unix #oracle11g

Вопрос:

У меня есть сценарий оболочки, запущенный в unix. Вот так:

 $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF
set head on; 
set feed on;
set serveroutput on;
set linesize 250;   
set pagesize 1000;
column STATUS new_value VAR_STATUS ;
column JOB_NAME new_value VAR_JOB_NAME ;
BEGIN
SELECT JOB_NAME, STATUS
FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'SOME_JOB' AND ACTUAL_START_DATE IN (SELECT MAX(ACTUAL_START_DATE) FROM DBA_SCHEDULER_JOB_RUN_DETAILS);

END;

/
exit
EOF
  

Я получаю ошибку:

 ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement
  

Что я делаю не так?

Комментарии:

1. Одна вещь, которую вы могли бы попробовать, это заменить вызов sqlplus cat командой. Перенаправьте вывод в файл и посмотрите на результаты, чтобы увидеть, не соответствует ли результат вашим ожиданиям.

2. Спасибо. Но что не так с этим синтаксисом?

Ответ №1:

Всякий раз, когда я делаю подобные вещи, я не использую операторы BEGIN и END. Представьте, что перенаправленный ввод точно такой же, как при вводе с клавиатуры.

Ответ №2:

При использовании begin и end Oracle будет обрабатывать как анонимную процедуру и ожидать объявления переменной и предложения into для присвоения значений переменным.

Удалите начало и конец и попробуйте. Если вы хотите начать End, тогда объявите переменные соответствующего типа данных и попробуйте.