Я использую Oracle SQL Developer написать ХП, которая принимает список значений, разделенных «» (динамический SQL) и использовать эту переменную "in", чтобы вызвать запрос из таблицы.Ошибка параметров хранимой процедуры, когда динамический SQL используется
Но я кончаю с ошибкой в
@p_case_nbr varchar2(100),
Error (4,5): PLS-00103: Обнаружен символ "@", когда ожидает одно из следующих действий: ток удаления существует до
СП б:
create or replace
procedure TEST_PROC
(
@p_case_nbr varchar2(100),
p_out_case_nbr out varchar2
)
as
cursor test_cur is
select t.COLUMN1
from test_table t
where t.column1 in (@p_case_nbr);
test_cur_line test_cur%ROWTYPE;
begin
p_out_case_nbr := null;
open test_cur;
LOOP
FETCH test_cur INTO test_cur_line;
EXIT WHEN test_cur%NOTFOUND;
p_out_case_nbr := p_out_case_nbr || ' ' || test_cur_line.COLUMN1;
dbms_output.put_line(test_cur_line.COLUMN1);
end loop;
close test_cur;
dbms_output.put_line('Final Value ' || p_out_case_nbr);
dbms_output.put_line('SP Completed Succesfully');
end;
Привет, Я попробовал этот подход без символа @ в оракула, но это не помогло. Он всегда обрабатывал строку как прямое значение для поиска вместо ** подготовки динамического запроса **. Но когда я попытался отладить, чтобы проверить, какое значение было передано p_case_nbr. Это было передано как идеальное «разделенное» значение. 'p_case_nbr \t '00100999996544413869', '00100999996544414064', '00100999996544413470' \t VARCHAR2.' Однако запрос думал значение с "" есть все значение для поиска. –
Какое сообщение об ошибке вы столкнулись после удаления '@' – Aspirant
Что вы подразумеваете под 'dynamic sql' в вашей программе , если вы хотите, чтобы значения проверялись на' where t.column1 in (p_case_nbr); 'тогда при вызове proc просто проходит '' 00100999996544413869,00100999996544414064,00100999996544413470'' – Aspirant