0
我使用的Oracle SQL Developer写一个存储过程,它接受由“”分开的值的列表(动态SQL),并在使用该变量“在”子句中激发表中的查询。 PLS-00103:错误在存储过程的参数时动态SQL使用
但我在
@p_case_nbr varchar2(100),
错误(4,5)结束了一个错误出现符号“@”在需要下列之一时:当前存在删除之前
的SP使用:
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;
嗨, 我试过这种方法没有@符号在Oracle中,但这并没有帮助。 它始终将字符串视为直接值来搜索,而不是**准备动态查询**。 但是,当我试图调试,以检查传递给p_case_nbr的值是什么。它被作为完美的','分开的值传递。 'p_case_nbr \t '00100999996544413869', '00100999996544414064', '00100999996544413470' \t VARCHAR2.' 但是查询的思想与价值观 “” 是搜索整个价值。 –
什么是您要删除'@' – Aspirant
后面临什么叫'动态sql'意思是,如果你想在'其中(p_case_nbr)t.column1进行检查值在你的程序 错误消息;'然后同时呼吁该proc只是通过 ''00100999996544413869,00100999996544414064,00100999996544413470'' – Aspirant