Пока я просматриваю параметризованные представления, я столкнулся с следующим пакетом и представлением, которое имеет параметр deptno в качестве параметра.Почему мы не можем назначить переменную в предложении `where` в параметризованном представлении
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();' Я просто добавил фигурные скобки в конце – SriniV
Я думаю, вам нужно быть более четким с вашей терминологией. Предложение WHERE определяет логический тест для фильтрации. Вы ничего не можете изменить внутри предложения WHERE. (Ну, может быть, с побочными эффектами, но если это работает, это настолько непредсказуемо, что вы не хотите этого делать.) – jpmc26