在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中实现这一目标?
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)
| 归档时间: |
|
| 查看次数: |
6453 次 |
| 最近记录: |