Pls 00323 ошибка

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 цента:

Кто-то удалил их спецификации, но все еще имел тело (нет, я не знаю как), и они «не хотели вводить все это обратно».

Итак, я показал им, как генерировать спецификацию из тела:

  1. Скопируйте тело на лист.
  2. Вставьте пустой заголовок над телом с названием пакета.
  3. Компиляция.
  4. [Получаете ли вы ошибку или нет,] Щелкните правой кнопкой мыши тело пакета в дереве пакетов и выберите «Синхронизировать спецификацию и тело».
  5. Выберите объекты для показа в спецификации и нажмите ОК.
  6. «волшебство происходит»

Только волшебства не произошло — и все стало красным… с ошибками 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 лет не живу в россии…

И так пакет есть отделения в организации и в этих отделениях есть ещё отделения по запрошенному АйДи
отделения выдаёт запрашиваемую информацию…

вот СПЕК

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
CREATE OR REPLACE PACKAGE xxogr_id AS
 
 
 
  PROCEDURE org_id_pub(ERRBUF        VARCHAR2,
                       RETCODE       NUMBER,
                       org_id VARCHAR2);
 
  PROCEDURE PUT_OUTPUT(P_MSG   IN VARCHAR2,
           P_LEVEL IN NUMBER DEFAULT 1);
 
                                
 
END xxogr_id;
 
 
а вот БОДИК 
 
 
CREATE OR REPLACE PACKAGE BODY xxogr_id AS
 
PROCEDURE org_id_pub (errbuf VARCHAR2, 
                      RETCODE       NUMBER,                                        
                      org_id     NUMBER) IS  
                             
  CURSOR xml_org_id IS
         
         SELECT mp.organization_id,
                mp.organization_code
                
         FROM   mtl_parameters mp      
         WHERE  mp.organization_id=org_id;
        
  CURSOR xml_org_detail (org_id NUMBER) IS
         
         SELECT msi.secondary_inventory_name,
                msi.organization_id,
                msi.description
                       
         FROM   mtl_secondary_inventories msi                            
         WHERE  msi.organization_id=org_id;
         
    BEGIN 
         PUT_OUTPUT('<?xml version = "1.0" ?>');
             PUT_OUTPUT('<ogrganizationinfo>');     
         
         FOR v_org IN xml_org_id LOOP
           
         PUT_OUTPUT('<p_organization>', 2);
         
         put_output('<p_org_id>'||
             v_org.organization_id  ||
                   '</p_org_id>',3);
               
         put_output('<p_org_code>'||
             v_org.organization_code||
                    '</P_org_code>',3);  
                    
         FOR v_org_data IN xml_org_detail (v_org.organization_id) LOOP
                    
           put_output('<org_data>',4);
           
            put_output ('<inventory_name>'||
                        v_org_data.secondary_inventory_name||
                        '</inventory_name>',5);
                     
            put_output ('<org_id>'||
                        v_org_data.organization_id||
                        '</org_id>',5);
                        
            put_output ('<org_desc>'||
                        v_org_data.description||
                        '<org_desc>');
                        
         put_output ('</org_data>');
        
      END LOOP;                          
                                           
     put_output ('</p_organization>');
     
   END LOOP;
   
  PUT_OUTPUT('</ogrganizationinfo>');   
        
    END;
 
                  PROCEDURE PUT_OUTPUT(P_MSG   IN VARCHAR2,
                                P_LEVEL IN NUMBER DEFAULT 1) IS
                      BEGIN
                      
                        DBMS_OUTPUT.PUT_LINE(LPAD(' ', P_LEVEL, ' ') || P_MSG);
                        FND_FILE.PUT_LINE(FND_FILE.OUTPUT,
                            LPAD(' ', P_LEVEL, ' ') || P_MSG);
    END;
  
  END;

а вот ошибка

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

Ну-у-у, такие вещи надо бы самому находить

SQL
1
2
3
4
5
6
7
spec
 
org_id VARCHAR2);
 
body
 
org_id NUMBER)



0



Эксперт Java

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



Понравилась статья? Поделить с друзьями:
  • Po135 ошибка рено
  • Playstation 4 fortnite ошибка
  • Plpgsql обработка ошибок
  • Po135 код ошибки
  • Playstation 3 ошибка 80029519