следующий код Здесь я передаю имя_таблицы в качестве аргумента (я не знаю, как его передать, я просто искал его на stackoverflow и других веб-сайтах и придумал это решение. Очевидно, это способ динамической передачи таблицы, однако Я не знаю логики c позади) к процедуре, а затем использую эту таблицу для получения максимальной и минимальной зарплаты сотрудников из таблицы сотрудников. Ниже приведен код процедуры (он работает хорошо)
CREATE or REPLACE PROCEDURE MINMAX (Employee in varchar2)
IS
LOWEST emp.SAL%TYPE;
HIGHEST emp.SAL%TYPE;
BEGIN
execute immediate 'SELECT MIN(SAL) from ' || Employee into LOWEST;
execute immediate 'SELECT MAX(SAL) from ' || Employee into HIGHEST;
DBMS_OUTPUT.PUT_LINE('MINIMUM SALARY is : ' || Lowest );
DBMS_OUTPUT.PUT_LINE('MAXIMUM SALARY is : ' || Highest );
END;
/
И вот как я пытался выполнить его, но он дал мне ошибку.
Begin
MINMAX(emp);
END;
/
Это ошибка, которую я получил
ORA-06550: line 2, column 9:
PLS-00357: Table,View Or Sequence reference 'EMP' not allowed in this context
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
Таблица с именем «emp» существует, но я не знаю, как передать это в качестве аргумента в процедуру ..
Во-вторых, если вы посмотрите на код процедуры, мне пришлось объявить переменные следующим образом:
LOWEST emp.SAL%TYPE;
HIGHEST emp.SAL%TYPE;
Могу ли я изменить их на тип данных в соответствии с переданной таблицей ( в качестве аргумента)? Вот так
LOWEST Employee.SAL%TYPE;
HIGHEST Employee.SAL%TYPE;
Я пытался сделать это, и это также дало мне ошибку по этому поводу.