#sql #oracle #plsql
#sql #Oracle #plsql
Вопрос:
Итак, я создал функцию и процедуру. Функция должна возвращать год с наибольшим количеством сотрудников в отделе (ввод пользователем). Затем процедура отобразит список сотрудников в отделе с определенным годом (год используется из возврата функции). Затем я компилирую их в пакет. Но когда я их вызвал, он не работает. в нем говорится: «не выполнено, тело пакета «SQL_CXYSUJQLPSOQZJEYHEXHDIXUZ.MY_PCKG» не существует ORA-06512: в строке 5″. Есть идеи? Спасибо!
create or replace package my_pckg as
function check_date (my_name departments.department_name%type) RETURN INT;
procedure check_name(P_IN_DEPT_NAME IN VARCHAR2,P_IN_YEAR IN NUMBER);
END;
/
declare
my_var int;
my_var2 departments.department_name%type:='Shipping';
begin
my_var:=my_pckg.check_date(my_var2);
dbms_output.put_line(my_var);
my_pckg.check_name(my_var2,my_var);
end;
/
Комментарии:
1. Перед
DECLARE
операцией попробуйте написатьSET SERVEROUTPUT ON
, а также, пожалуйста, поделитесь, в чем смысл того, что не работает? Выдает ли он какую-либо ошибку или не возвращает правильный вывод?2. ошибка «не выполняется, тело пакета «SQL_CXYSUJQLPSOQZJEYHEXHDIXUZ.MY_PCKG» не существует ORA-06512: в строке 5″ @Tejash
3. Вы создали объявление пакета, но не создали тело пакета. Вам необходимо создать тело пакета с тем же фактическим кодом функции / процедуры.
4. Теперь я понял. Спасибо! @Tejash
Ответ №1:
Глядя на вашу проблему, кажется, что вы не создали тело пакета.
Package
(заголовок) содержит единственное объявлениеfunction/procedure
внутри него.- Фактическая реализация
function/procedure
должна быть включена в тело пакета.
Что-то вроде следующего:
CREATE OR REPLACE PACKAGE PKG_NAME AS
-- DECLARATION OF FUNCTION AND PROCEDURE WILL GO HERE
FUNCTION FUN1(....);
PROCEDURE PROC1(....);
END PKG_NAME;
/
CREATE OR REPLACE PACKAGE BODY PKG_NAME AS
-- ACTUAL IMPLEMENTATION OF FUNCTION AND PROCEDURE WILL GO HERE
FUNCTION FUN1(....) AS
....
....
END FUN1;
PROCEDURE PROC1(....) AS
....
....
END PROC1;
END PKG_NAME;
/