Как использовать переменные в Oracle PL / SQL, где предложение - PullRequest
7 голосов
/ 14 апреля 2011

Я не могу заставить переменные работать в предложении Oracle PL / SQL где.Я пришел из Microsoft SQL Server, и там было легко.Например, какие бы все шаги были необходимы, чтобы сделать что-то похожее на следующее?

declare @var int set @var = 1

select * from SomeTable where SomeField = @var

Это не похоже, что это должно быть сложно в PL / SQL, но, очевидно, так и есть.: / / Я слышал, что мне нужно использовать курсоры и т.п. в PL / SQL?

Любая помощь будет принята с благодарностью.Спасибо.

Ответы [ 4 ]

10 голосов
/ 14 апреля 2011

Что вы хотите сделать с данными, которые возвращает SELECT? Если вы просто хотите увидеть его, вам совсем не нужен PL / SQL, просто сделайте это в SQL Plus:

variable var number
exec :var := 1

select * from SomeTable where SomeField = :var;

Или в таком инструменте, как SQL Developer или Toad, просто сделайте это:

select * from SomeTable where SomeField = :var;

и вам будет предложено ввести значение для: var.

5 голосов
/ 14 апреля 2011

Следующий код объявляет переменную var для использования в предложении WHERE, а переменная result для помещения результата затем выполняет его внутри блока PL / SQL.

DECLARE
   var      INT := 1;
   result   INT;
BEGIN
   SELECT 123
     INTO result
     FROM DUAL
    WHERE var = 1;

   DBMS_OUTPUT.put_line (var);
   DBMS_OUTPUT.put_line (result);
END;

Вызовы DBMS_OUTPUT.PUT_LINE позволяют выводить эту СУБД:

1
123
2 голосов
/ 15 апреля 2011
declare

  type t_rec is record
  (
  col1 number,
  col2 myTable.col2%type
  );
  v_rec t_rec;

  type t_tab is table of v_rec%type index by binary_integer;
  v_tab t_tab;

begin

  select col1, col2
  bulk collect into v_tab
  from myTable
  where col3 = 'BLAH';

  -- do something great with v_tab...

end;

Также знайте, что если вы попытаетесь выбрать (или выполнить массовый сбор) переменную, и строки не будут возвращены, вы получите исключение no_data_found, так что вы можете решить эту ситуацию.

См. подробнее здесь о коллекциях pl / sql. Выше используется ассоциативный массив, но есть и вложенные таблицы и массивы. Снова смотрите ссылку.

Надеюсь, это поможет.

1 голос
/ 02 марта 2016

Я использую это так

select * from sec_mainmenu where serno = '&MENU_ID';

Когда вы запустите его, pl / sql запросит значение MENU_ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...