在T-SQL中,可以使用以下查询在变量中执行查询.
  DECLARE @QUERY VARCHAR(4000)
  SET @QUERY='SELECT SAL_GRD_CODE,SAL_GRD_NAME
  FROM HS_PR_SALARY_GRADE WHERE SAL_GRD_CODE IN ('000001','000002')'
  EXEC(@QUERY)
有没有办法在Oracle中实现这一目标?
SET @ QUERY ='SELECT SAL_GRD_CODE,SAL_GRD_NAME FROM HS_PR_SALARY_GRADE WHERE SAL_GRD_CODE IN('000001','000002')'
我在查询中看不到任何动态值.那么,为什么要使用PL/SQL呢?您可以使用SELECT语句在纯SQL中执行此操作.
但是,如果你真的在PL/SQL中这样做,那么你需要(ab)使用EXECUTE IMMEDIATE.
此外,您还希望检索PL/SQL中SELECT语句的输出,Oracle期望INTO子句.
例如,
SQL> var v_empno number;
SQL> exec :v_empno := 7369;
PL/SQL procedure successfully completed.
SQL> SET serveroutput ON
SQL>
SQL> DECLARE
  2    v_Sal   NUMBER;
  3    str     VARCHAR2(200);
  4  BEGIN
  5    str    :='SELECT sal FROM emp WHERE empno =' ||:v_empno;
  6    EXECUTE IMMEDIATE str INTO v_Sal;
  7    dbms_output.put_line('Employee salary is '||v_sal);
  8  END;
  9  /
Employee salary is 800
PL/SQL procedure successfully completed.
SQL>
使用绑定变量
您可以在SQL*Plus中声明一个绑定变量,然后选择它:
SQL> var v_empno number;
SQL> var v_sal number;
SQL> exec :v_empno := 7369;
PL/SQL procedure successfully completed.
SQL> DECLARE
  2    str     VARCHAR2(200);
  3  BEGIN
  4    str    :='SELECT sal FROM emp WHERE empno =' ||:v_empno;
  5    EXECUTE IMMEDIATE str INTO :v_sal;
  6  END;
  7  /
PL/SQL procedure successfully completed.
SQL>
SQL> print v_sal;
     V_SAL
----------
       800
SQL>