【发布时间】: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