Can someone help me put my pl/sql procedure in a package? I’ve tried and I’m struggling with it:
This is what I have, for my package specification:
CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;
--
This is my package body where im running into the problems:
CREATE OR REPLACE PACKAGE BODY film_pkg
IS
PROCEDURE get_films (fname IN film.title%TYPE,
r_date OUT film.release_date%TYPE,
dur OUT film.duration%TYPE)
AS
BEGIN
SELECT release_date, duration
INTO r_date, dur
FROM FILM
WHERE title = fname;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
r_date := '';
dur := '';
END get_films;
END film_pkg;
if anyone could help me fix the errors i’d appreciate it:
Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined in the package body
Поскольку чьи-то старые ошибки всегда являются новостью для меня, я добавлю свои 3 цента:
Кто-то удалил их спецификации, но все еще имел тело (нет, я не знаю как), и они «не хотели вводить все это обратно».
Итак, я показал им, как генерировать спецификацию из тела:
- Скопируйте тело на лист.
- Вставьте пустой заголовок над телом с названием пакета.
- Компиляция.
- [Получаете ли вы ошибку или нет,] Щелкните правой кнопкой мыши тело пакета в дереве пакетов и выберите «Синхронизировать спецификацию и тело».
- Выберите объекты для показа в спецификации и нажмите ОК.
- «волшебство происходит»
Только волшебства не произошло — и все стало красным… с ошибками PLS-00323.
Разработчик SQL заполняет спецификацию пакета, извлекая заголовки процедур и функций из самого кода, поэтому вам не нужно беспокоиться о таких вещах. Он представляет список объектов для добавления в пакет / спецификацию, и вы выбираете, какие из них добавить.
Мы выбрали правильные процедуры и функции, но это скомпилировано с ошибками. Снова. И опять.
Оказывается, что функции, которые выдавали ошибки, были определены в теле пакета с помощью DETERMINISTIC — когда редактор SQL Dev выполнял синхронизацию, он пропускал слово. Это довольно существенно.
Как бы то ни было, пересмотрел, вставил DETERMINISTIC в конкретные функции перед точкой с запятой, сохранил (перекомпилировал), а затем это снова стало волшебством.
Вы ожидаете, что SQL Developer выполнит всю работу вместо половины… работы.
the follow code is getting an error PLS-00323 in two places. The first place is on the procedure spt_save_casedetail and it says «subprogram or cursor ‘spt_save_casedetail’ is declared in the package specification and must be defined in the package body». Here is the code (warning its long):
create or replace
package body ct_cu_act_um1_pg
is
procedure spt_save_casedetail (
p_primarymemberplanid_in in casedetail.primarymemberplanid%type,
p_servicetypecd_in in casedetail.servicetypecd%type,
p_notifydt_in in casedetail.notifydt%type,
p_assignedentityid_in in casedetail.assignedentityid%type,
p_startdt_in in casedetail.startdt%type,
p_enddt_in in casedetail.enddt%type,
p_caretypemnemonic_in in casedetail.caretypemnemonic%type,
p_casestatusmnemonic_in in casedetail.casestatusmnemonic%type,
p_odsorderingproviderid_in in casedetail.odsorderingproviderid%type,
p_sourcemnemonic_in in casedetail.sourcemnemonic%type,
p_caseresolutionmnemonic_in in casedetail.caseresolutionmnemonic%type,
p_odsservicingproviderid_in in casedetail.odsservicingproviderid%type,
p_serviceitemmnemonic_in in casedetail.serviceitemmnemonic%type,
p_providerinnetworkind_in in casedetail.providerinnetworkind%type,
p_detailtxt_in in casedetail.detailtxt%type,
p_odsfacilityvendorid_in in casedetail.odsfacilityvendorid%type,
p_servicelocationcd_in in casedetail.servicelocationcd%type,
p_facilityinnetworkind_in in casedetail.facilityinnetworkind%type,
p_audit_user_in in casedetail.updatedby%type,
p_return_cur_out out sys_refcursor,
p_err_code_out out number,
p_err_mesg_out out varchar2)
is
v_casedetailid casedetail.casedetailid%type;
begin
select casedetail_seq.nextval into v_casedetailid from dual;
if v_casedetailid is null
then
insert into casedetail
(casedetailid,
primarymemberplanid,
servicetypecd,
notifydt,
assignedentityid,
startdt,
enddt,
caretypemnemonic,
casestatusmnemonic,
odsorderingproviderid,
sourcemnemonic,
caseresolutionmnemonic,
odsservicingproviderid,
serviceitemmnemonic,
providerinnetworkind,
detailtxt,
odsfacilityvendorid,
servicelocationcd,
facilityinnetworkind)
values
(casedetail_seq.nextval,
p_primarymemberplanid_in,
p_servicetypecd_in,
p_notifydt_in,
p_assignedentityid_in,
p_startdt_in,
p_enddt_in,
p_caretypemnemonic_in,
p_casestatusmnemonic_in,
p_odsorderingproviderid_in,
p_sourcemnemonic_in,
p_caseresolutionmnemonic_in,
p_odsservicingproviderid_in,
p_serviceitemmnemonic_in,
p_providerinnetworkind_in,
p_detailtxt_in,
p_odsfacilityvendorid_in,
p_servicelocationcd_in,
p_facilityinnetworkind_in);
open p_return_cur_out for
select casedetail_seq.currval
from dual;
else
update casedetail
set primarymemberplanid = p_primarymemberplanid_in,
servicetypecd = p_servicetypecd_in,
notifydt = p_notifydt_in,
assignedentityid = p_assignedentityid_in,
startdt = p_startdt_in,
enddt = p_enddt_in,
caretypemnemonic = p_caretypemnemonic_in,
casestatusmnemonic = p_casestatusmnemonic_in,
odsorderingproviderid = p_odsorderingproviderid_in,
sourcemnemonic = p_sourcemnemonic_in,
caseresolutionmnemonic = p_caseresolutionmnemonic_in,
odsservicingproviderid = p_odsservicingproviderid_in,
serviceitemmnemonic = p_serviceitemmnemonic_in,
providerinnetworkind = p_providerinnetworkind_in,
detailtxt = p_detailtxt_in,
odsfacilityvendorid = p_odsfacilityvendorid_in,
servicelocationcd = p_servicelocationcd_in,
facilityinnetworkind = p_facilityinnetworkind_in,
updateddt = systimestamp,
updatedby = p_audit_user_in
where casedetailid = v_casedetailid;
open p_return_cur_out for
select casedetail_seq.currval
from dual;
end if;
p_err_code_out := 0;
exception
when others then
p_err_code_out := -1;
p_err_mesg_out := 'error in ct_cu_act_um1_pg.spt_save_casedetail =>'|| sqlerrm;
end spt_save_casedetail;
Here is the package spec:
create or replace
package ct_cu_act_um1_pg
is
procedure spt_save_casedetail (
p_primarymemberplanid_in in casedetail.primarymemberplanid%type,
p_servicetypecd_in in casedetail.servicetypecd%type,
p_notifydt_in in casedetail.notifydt%type,
p_assignedentityid_in in casedetail.assignedentityid%type,
p_startdt_in in casedetail.startdt%type,
p_enddt_in in casedetail.enddt%type,
p_caretypemnemonic_in in casedetail.caretypemnemonic%type,
p_casestatusmnemonic_in in casedetail.casestatusmnemonic%type,
p_odsorderingproviderid_in in casedetail.odsorderingproviderid%type,
p_sourcemnemonic_in in casedetail.sourcemnemonic%type,
p_caseresolutionmnemonic_in in casedetail.caseresolutionmnemonic%type,
p_odsservicingproviderid_in in casedetail.odsservicingproviderid%type,
p_serviceitemmnemonic_in in casedetail.serviceitemmnemonic%type,
p_providerinnetworkind_in in casedetail.providerinnetworkind%type,
p_detailtxt_in in casedetail.detailtxt%type,
p_odsfacilityvendorid_in in casedetail.odsfacilityvendorid%type,
p_servicelocationcd_in in casedetail.servicelocationcd%type,
p_facilityinnetworkind_in in casedetail.facilityinnetworkind%type,
p_return_cur_out out sys_refcursor,
p_err_code_out out number,
p_err_mesg_out out varchar2
);
The second place im getting the same error is where I defined v_casedetailid. Ive checked to make sure everything is spelt correctly, but maybe I’m missing something because I’ve been looking at it for awhile. Any help is appreciated, thanks.
может кто-нибудь помочь мне поместить мою процедуру pl/sql в пакет? Я пробовал, и я борюсь с этим:
Это то, что у меня есть, для моей спецификации пакета:
CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;
--
Это мое тело пакета, где im сталкивается с проблемами:
CREATE OR REPLACE PACKAGE BODY film_pkg
IS
PROCEDURE get_films (fname IN film.title%TYPE,
r_date OUT film.release_date%TYPE,
dur OUT film.duration%TYPE)
AS
BEGIN
SELECT release_date, duration
INTO r_date, dur
FROM FILM
WHERE title = fname;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
r_date := '';
dur := '';
END get_films;
END film_pkg;
Если кто-то может помочь мне исправить ошибки, я ценю это:
Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined in the package body
3 ответов
ваши определения заголовка и процедуры тела не соответствуют
в заголовке, у вас есть:
PROCEDURE get_films(fname VARCHAR2);
тогда как в теле:
PROCEDURE get_films(fname IN film.title%type,
r_date OUT film.release_date%type, dur OUT film.duration%type)
вам, вероятно, просто нужно обновить определение заголовка с двумя дополнительными параметрами?
Подведем Итоги
- убедитесь, что определение заголовка соответствует всем параметрам реализации тела (количество параметров, имена параметров, порядок параметров и типы параметров)
- согласно комментарию Алекса, не смешивайте и не сопоставляйте пользовательский тип (
film.title%type
) с базовым типом (VARCHAR2
). Выбирай одно или другое.
«имя параметра это было внутри процедуры, определенной в теле, не совпадало с соответствующим именем параметра в теле.»
«подпрограмма или курсор «M115_EDIT» объявлены в спецификации пакета и должны быть определены в теле пакета»
Я получил эту ошибку, когда работал над своим проектом.причиной этого было имя параметра, которое было внутри процедуры, определенной в теле, не совпадало с соответствующим именем параметра в теле.
мои спецификация:
мое тело
мой параметр market_code отличается в теле по сравнению со спецификацией, где она определена как sub_market_code.произошла ошибка из-за этой разницы.
я изменил параметр sub_market_code в спецификации на market_code, чтобы он соответствовал телу, и это решило проблему, упомянутую выше.
ясно, что 2 параметра, которые упоминаются в вашей реализации тела процедуры «r_date» и «dur», не определены в спецификации.ошибка из-за этой разницы между телом и спецификация.
-1
автор: Sithija Piyuman Thewa Hettige
Lutrix 1 / 1 / 0 Регистрация: 20.06.2012 Сообщений: 51 |
||||
1 |
||||
Ошибка при Компиляции20.06.2012, 14:37. Показов 4398. Ответов 4 Метки нет (Все метки)
Дорогие друзья сразу прошу прощение за свой русский так как уже 13 лет не живу в россии… И так пакет есть отделения в организации и в этих отделениях есть ещё отделения по запрошенному АйДи вот СПЕК
а вот ошибка Compilation errors for PACKAGE BODY APPS.XXOGR_ID Error: PLS-00323: subprogram or cursor ‘ORG_ID_PUB’ is declared in a package specification and must be defined in the package body Пожалуйста подскажите что не так?? Спасиба огромное!
0 |
Grossmeister Модератор 4204 / 3044 / 581 Регистрация: 21.01.2011 Сообщений: 13,180 |
||||
20.06.2012, 14:54 |
2 |
|||
Ну-у-у, такие вещи надо бы самому находить
0 |
4088 / 3822 / 745 Регистрация: 18.05.2010 Сообщений: 9,331 Записей в блоге: 11 |
|
20.06.2012, 15:00 |
3 |
В заголовке у вас объявление процедуры org_id_pub, отличается от того что указано в спецификации пакета.
0 |
1 / 1 / 0 Регистрация: 20.06.2012 Сообщений: 51 |
|
21.06.2012, 15:51 [ТС] |
4 |
ээхх ребят огромное спасибо.. всё заработало)))
0 |
1 / 1 / 0 Регистрация: 20.06.2012 Сообщений: 51 |
|
22.06.2012, 20:45 [ТС] |
5 |
ребят ещё вот такой вопрос. после того как я это всё положил в канкарент который создал в оракал апликейшон . с аут путом на хмл. то почему браузер может не отоброжать аутпут?? хотя весь запрос проходит на ура.. и у других всёё видно а вот в маём браузере чтото не так может есть какаята опция на включение или ещё чтонибуть? спасибо огромное.
0 |