日期:2014-05-16  浏览次数:20994 次

关于oracle存储过程的问题
我要定义一个变量,这个变量保存的是一句SQL中的一段,比如 where id = '1';然后下面的SQL组合这个变量的SQL查询,该怎么写?

类似于如下这样:

String tmpSql = " where id = '1' ";
String sql = "select * from table "+tmpSql ; //执行这个SQL

------最佳解决方案--------------------
这样?

v_tmp:= 'where id = 1';
v_sql := 'select * from table' 
------其他解决方案--------------------
 v_tmp;

execute immdeiate v_sql;
------其他解决方案--------------------

SQL> declare
  2    v_where_sql varchar2(500);
  3    v_sql       varchar2(4000);
  4    v_ename     varchar2(100);
  5  begin
  6    v_sql       := 'select ename from emp';
  7    v_where_sql := ' where empno=7499';
  8    v_sql       := v_sql 
------其他解决方案--------------------
 v_where_sql;
  9    execute immediate v_sql
 10      into v_ename;
 11    dbms_output.put_line(v_ename);
 12  end;
 13  /
 
ALLEN
 
PL/SQL procedure successfully completed

------其他解决方案--------------------
谢谢上面各位的回复,已经可以了。但现在我又有新的问题:

  execute immediate sql_siteOfSmartphone
    into rest
    using noUsedSiteId, siteTypeOfSp;
DBMS_OUTPUT.PUT_LINE(sql_siteOfSmartphone);

怎么把执行的动态SQL输出出来呢?需要把传入的变量全输出出来,好跟踪执行的状态