【问题标题】:Why cant we assign a variable in the `where` clause in parameterized view为什么我们不能在参数化视图的“where”子句中分配一个变量
【发布时间】:2016-02-04 21:44:15
【问题描述】:

在浏览参数化视图时,我遇到了以下以 deptno 作为参数的包和视图。

CREATE OR REPLACE PACKAGE glb_variables
IS
  gv_deptno scott.emp.deptno%TYPE;

  PROCEDURE set_deptno(deptno_in scott.emp.deptno%TYPE);

  FUNCTION get_deptno RETURN scott.emp.deptno%TYPE;
END;
/

CREATE OR REPLACE PACKAGE BODY glb_variables
IS
  PROCEDURE set_deptno(deptno_in scott.emp.deptno%TYPE) IS
    BEGIN
      gv_deptno := deptno_in;
    END;

  FUNCTION get_deptno RETURN scott.emp.deptno%TYPE IS
    BEGIN
      RETURN gv_deptno;
    END;
END;
/

CREATE OR REPLACE VIEW emp_in_dep AS
  SELECT *
  FROM scott.emp
  WHERE deptno = glb_variables.get_deptno;

在视图的where 子句中,当我尝试直接分配变量时。我收到以下错误。

ORA-06553: PLS-221: 'GV_DEPTNO' is not a procedure or is undefined

为什么我们不能在where 子句中分配一个变量?

【问题讨论】:

  • 您的函数被包装在一个包中。所以将它们称为where deptno = glb_variables.get_deptno(); 我只是在末尾添加了大括号
  • 我认为你需要更清楚你的术语。 WHERE 子句定义用于过滤的布尔测试。您不能修改 WHERE 子句中的任何内容。 (嗯,也许有副作用,但如果这有效,它是如此不可预测,你不想这样做。)

标签: oracle plsql package variable-assignment


【解决方案1】:

PLSQL 和 SQL 的世界很接近,但没有那么接近。包变量不能直接在 SQL 中使用。您必须使用返回该变量值的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    相关资源
    最近更新 更多