GaneshVidiyala Ответов: 2

Как вызвать переменную в запросе select в oracle


Мне нужно преобразовать приведенный ниже запрос MS SQL Server в формат oracle

объявить @n int
set @n=10
выберите id,@n из таблицы


Пожалуйста, помогите мне.

Что я уже пробовал:

Я попробовал следующий запрос, но он не работает

Объявите число n:=10;
Начать

выберите id,:n из таблицы

конец

Dave Kreskowiak

Извини, мне просто нужно выплеснуть свою любимую обиду. НЕТ ТАКОЙ ВЕЩИ, КАК "ВЫЗОВ ПЕРЕМЕННОЙ"!

Вы использовать содержание переменной.

2 Ответов

Рейтинг:
1

Maciej Los

5ed!

Рейтинг:
0

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[^]


Maciej Los

5ed!