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