使用动态SQL时存储过程的参数出错

时间:2013-04-01 12:38:24

标签: sql stored-procedures dynamic-sql oracle-sqldeveloper

我正在使用 Oracle Sql Developer 编写一个存储过程,它接受由“,”(动态sql )分隔的值列表,并在“ in “子句从表中触发查询。

但我最终在

处出现错误
@p_case_nbr       varchar2(100),

错误(4,5):PLS-00103:遇到以下其中一项时遇到符号“@”:当前删除存在

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;

1 个答案:

答案 0 :(得分:0)

ORACLE中,无需在变量之前提供@ 只需尝试从指定的@移除@p_case_nbr,然后再试一次 而且也不需要像@p_case_nbr varchar2(100)那样指定参数的大小 只需给@p_case_nbr varchar