Мой вопрос довольно простой, но я полный новичок в хранимой процедуре и должен быстро обойтись. Любая помощь будет оценена,Oracle Хранимая процедура
Ниже текущая хранимая процедура у нас есть,
PROCEDURE get_something(
type IN VARCHAR2,
value IN VARCHAR2,
i_type OUT VARCHAR2,
i_id OUT VARCHAR2)
AS
TYPE t_array
IS
TABLE OF VARCHAR2(320);
identifers t_array;
column_name VARCHAR2(32);
info_qry VARCHAR2(500);
top_row_qry VARCHAR2(500);
BEGIN
identifers := t_array('ABC');
column_name := get_column_name(type);
info_qry := 'select INS.i_id, INS.model from table1 INS where INS.'||column_name||'='''||value||''' order by INS.version desc';
top_row_qry := 'select * from ('||info_qry||') where rownum<=1';
EXECUTE immediate top_row_qry INTO i_id, i_type;
EXCEPTION
WHEN OTHERS THEN
i_id := NULL;
i_type := NULL;
END get_something;
Теперь, когда я выполнить эту процедуру, она дает мне одну запись из-за состояния RowNum.
Мое требование - удалить rownum из top_row_qry, поэтому результат будет несколько строк.
Я хочу хранить каждое поле в некоторой переменной, из которой я буду использовать одну из переменных для некоторого сравнения в самой процедуре.
Так что в основном я хочу сохранить результаты, которые я могу позже перебрать и сравнить со списком значений.
Кроме того, мне нужно определить список значений в самой этой процедуре.
Что-то, как показано ниже:
list_of_vals:= t_array('ABC','XYZ');
Может кто-нибудь помочь мне в этом.
https://www.techonthenet.com/oracle/loops/cursor_for.php – OldProgrammer
Да как было упомянуто OldProgrammer - решение заключается в использовании курсоров, когда более чем один строк манипулировать в PL/SQL – Pat
Используйте 'bulk collect' в коллекцию –