如何在Oracle中的变量中执行查询?

时间:2015-03-24 05:20:26

标签: oracle psql

在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中实现这一目标?

1 个答案:

答案 0 :(得分:6)

  

SET @QUERY =' SELECT SAL_GRD_CODE,SAL_GRD_NAME     从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>