Подскажите пользователя для ввода в оракул

Как запросить пользователя для ввода в Oracle с помощью SQLTools v1.6? Я попробовал следующий блок PL/SQL:

DECLARE 
 type tes_tab is table of test_table%rowtype;
 test_tab tes_tab;    
BEGIN

  execute immediate 'SELECT * FROM test_table WHERE memid=' || &MemID
       bulk collect into test_tab;

  for i in 1..test_tab.count 
  loop
    dbms_output.put_line(test_tab(i).memid || ' ' || test_tab(i).clmtype);
  end loop;

END;

Он запрашивает ввод у пользователя во время компиляции. Однако это значение нельзя использовать в операторе выбора. Есть ли другой способ достичь того, что я ищу.

Таблица содержит 852269 записей с несколькими строками для одного memID(я предоставил несколько строк здесь):

 MEMID       CLMTYPE   PAIDAMT   SERVICEDATE           PAIDDATE
----------- --------- --------- --------------------- ---------------------
 220000096   RX         77.22    06.05.2011 00:00:00   27.05.2011 00:00:00
 220000096   RX         77.22    04.02.2011 00:00:00   27.02.2011 00:00:00
 220000096   RX         93.36    01.01.2011 00:00:00   27.01.2011 00:00:00
 220000096   RX         15.07    09.08.2012 00:00:00   07.09.2012 00:00:00
 220000096   RX        105.52    06.01.2012 00:00:00   04.02.2012 00:00:00
 220000096   RX         93.36    02.03.2011 00:00:00   27.03.2011 00:00:00
 220000096   RX        105.52    09.11.2011 00:00:00   09.12.2011 00:00:00
 220000096   RX        105.52    10.03.2012 00:00:00   13.04.2012 00:00:00
 220000096   RX         50.52    06.04.2011 00:00:00   27.04.2011 00:00:00

1 ответ

Небольшие изменения в вашем коде

DECLARE 
  vblMemID test_table%rowtype;
BEGIN
  EXECUTE IMMEDIATE'SELECT * FROM test_table WHERE memid='||&MemID into vblMemID ;
dbms_output.put_line(vblMemID.column1_name||' '||vblMemID.column2_name);
END;

Примечание. Column1_name и column2_name означают имена столбцов вашей таблицы. И приведенный выше код будет работать, если ваш запрос на выборку возвращает только одну строку. Если он возвращает более одной строки, мы должны использовать другой метод. Если вам нужно, я выложу этот код.

Изменить Приведенный ниже код будет работать, если запрос на выборку вернет более одной строки. Для более чем одного ряда мы должны использовать коллекции или курсоры sysref в oracle.

DECLARE 
 type tes_tab is table of test_table%rowtype;
test_tab tes_tab;
BEGIN

execute immediate 'SELECT * FROM test_table WHERE memid='||&MemID bulk collect into test_tab;

for i in 1..test_tab.count 
loop
dbms_output.put_line(test_tab(i).column1_name||' '||test_tab(i).column2_name);
end loop; 
END;
Другие вопросы по тегам