Подскажите пользователя для ввода в оракул
Как запросить пользователя для ввода в 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;