Wendelius
Если я правильно понял ваш вопрос, вы пытаетесь вернуть данные из PL/SQL с помощью упомянутого запроса. Хотя процедура в SQL Server может возвращать данные в виде результирующего набора, процедура Oracle не может делать это таким же образом.
Рассмотрим следующий пример
DECLARE
n number;
numvalue number;
datevalue date;
BEGIN
n := 10;
SELECT SYSDATE, n
FROM dual;
END;
/
В этом бы случае
ORA-06550
ошибка с
INTO
оговорка ожидаема. Другими словами, вам нужно вернуть данные в переменные.
Обратите внимание, что я не использовал двоеточие перед именами переменных. Двоеточие обычно используется в клиентских программах для указания переменной привязки, но не внутри блока PL/SQL.
Теперь, если вы измените блок на следующий
DECLARE
n number;
numvalue number;
datevalue date;
BEGIN
n := 10;
SELECT SYSDATE, n
INTO datevalue, numvalue
FROM dual;
RAISE_APPLICATION_ERROR(-20001, 'Date: ' || TO_CHAR(datevalue) || ', numvalue: ' || TO_CHAR(numvalue));
END;
/
Когда блок выполняется, запрос работает нормально, и вы можете увидеть результат с помощью пользовательского исключения. Результат должен быть таким
ORA-20001: Date: 10-JAN-20, numvalue: 10
Так что теперь данные известны внутри блока. Для того чтобы вернуть эти данные вызывающей программе, у вас есть несколько вариантов. Например, вы можете использовать REF_CURSOR, определить тип таблицы, использовать функцию конвейера и так далее.
Для получения нескольких примеров возврата данных взгляните на
Примеры создания функций Oracle[
^]