动态sql
declare
str_sql varchar2(200);
c_1 varchar2(20);
begin
c_1:=....//给变量赋值
str_sql:='select para_id from t_parameter where para_code= '||c_1;
execute immediate str_sql;
end;
/

解决方案 »

  1.   

    如果c_l 的值是'123'
    那么str_sql的值是
    select para_id from t_parameter where para_code=123
    但是我想得到的结果是
    select para_id from t_parameter where para_code='123'
    请问该怎么办
      

  2.   

    create or replace procedure sp_test( str in varchar2)
    as
      tmpstr varchar(200);
    begin
      tmpstr := 'select para_id from t_parameter where para_code= '+ str;
      execute immediate str_sql;
    end;
      

  3.   

    select para_id from t_parameter where para_code='&c_1'
      

  4.   

    我也是这样定的但是他报了一个这样的错误,帮忙看看这是怎么回事
    pls-00103:encountered the symbol "select" when expecting one of following :.[*@....] at in is mod not rem........
      

  5.   

    最好的办法不是动态sql,
    而是光标
    declare
    cursor test_cur(mypara varchar2) is
    select para_id from t_parameter 
    where para_code=mypara;
    begin
       mypara:='123';
       open test_cur(mypara);
       ……
       close test_cur;
    end;
      

  6.   

    动态sql的结果你到哪里去取,而且安全性没有光标高,
    其实oracle建立不要过多使用动态sql。
      

  7.   

    declare
    str_sql varchar2(200);
    c_1 varchar2(20);
    begin
    c_1:=....//给变量赋值
    str_sql:='select para_id from t_parameter where para_code=:c_l ';
    execute immediate str_sql into ...using c_1;
    end;
    但 penitent(只取一瓢) 做法更合适一些,尤其是返回多行时