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

Nis*_*tha 3 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)
Run Code Online (Sandbox Code Playgroud)

有没有办法在Oracle中实现这一目标?

Lal*_*r B 6

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>
Run Code Online (Sandbox Code Playgroud)

使用绑定变量

您可以在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>
Run Code Online (Sandbox Code Playgroud)