2017-10-13 77 views
0

Oracle Database 12c Enterprise Editionリリース12.1.0.2.0 - 64bit Production DBでこの手順を実行しましたが、毎回このエラーが発生します。それを再コンパイルしてください。手順はコピーされ、別のDBから貼り付けるので、他のDBにパッケージが正常に動作するため、エラーが、今そこにある...それにもかかわらず、私はこのエラーを得た:エラー(3,34):PLS-00201:識別子XXXを宣言する必要があります

Error(1,35): PLS-00304: cannot compile body of 'P_COUNTRY_PLATS' without its specification 

create or replace PACKAGE "P_COUNTRY_PLATS" is 

procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ); 
procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ,p_request_date IN lopes.country_plats.request_date%TYPE 
        ,p_action_history_id IN lopes.country_plats.action_history_id%TYPE 
        ); 
procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ,p_request_date IN lopes.country_plats.request_date%TYPE 
        ,p_action_history_id IN lopes.country_plats.action_history_id%TYPE 
        ,p_ac_scheduled_action_id IN lopes.country_plats.ac_scheduled_action_id%TYPE 
        ); 

procedure getNextMsgToSend (p_channel IN lopes.country_plats.channel%TYPE 
          ,p_ip_address IN OUT VARCHAR2 
          ,p_message IN OUT lopes.country_plats.message%TYPE 
          ,p_msg_id IN OUT lopes.country_plats.country_plats_id%TYPE 
          ); 
procedure getNextMsgToSendByImei(p_imei IN VARCHAR2, p_message IN OUT VARCHAR2, p_msg_id IN OUT NUMBER); 

procedure setStatus(p_msg_id IN NUMBER, p_status IN VARCHAR2); 

procedure cancel_scheduled_actions; 
procedure cancel_scheduled_actions(p_msg_id IN number); 
end; 
/

create or replace PACKAGE BODY "P_COUNTRY_PLATS" is 
procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ) 
is 
begin 
    createNew(p_msisdn, p_channel, p_message, sysdate, null, null); 
end; 

procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ,p_request_date IN lopes.country_plats.request_date%TYPE 
        ,p_action_history_id IN lopes.country_plats.action_history_id%TYPE 
        ) 
is 
begin 
    createNew(p_msisdn, p_channel, p_message, p_request_date, p_action_history_id, null); 
end; 

procedure createNew (p_msisdn IN lopes.country_plats.recipient_msisdn%TYPE 
        ,p_channel IN lopes.country_plats.channel%TYPE 
        ,p_message IN lopes.country_plats.message%TYPE 
        ,p_request_date IN lopes.country_plats.request_date%TYPE 
        ,p_action_history_id IN lopes.country_plats.action_history_id%TYPE , 
        p_ac_scheduled_action_id IN lopes.country_plats.ac_scheduled_action_id%TYPE 
) 
is 
    PsdRetryNbroutgoing_psd number; 
begin 
    PsdRetryNbr := of_owner.p_ru.getPsdRetryNbr(p_msisdn); 

    of_owner.p_db_trc.trc(1007, '-'||p_channel||'-'||p_msisdn||'-'||p_message||'-'||p_request_date||'-'||p_action_history_id||'-'||p_ac_scheduled_action_id||'-'||PsdRetryNbr); 

    insert into lopes.country_plats 
    (country_plats_id,channel,recipient_msisdn,message,request_date,status,action_history_id, ac_scheduled_action_id, remaining_retry_nbr) values (
    lopes.SEQ_COUNTRY_PLATS_ID.nextval 
    ,p_channel 
    ,p_msisdn 
    ,p_message 
    , p_request_date 
    ,'R' 
    ,p_action_history_id 
    ,p_ac_scheduled_action_id 
    ,PsdRetryNbr 
); 
end;      

procedure getNextMsgToSend(p_channel IN lopes.country_plats.channel%TYPE 
          ,p_ip_address IN OUT VARCHAR2 
          ,p_message IN OUT lopes.country_plats.message%TYPE 
          ,p_msg_id IN OUT lopes.country_plats.country_plats_id%TYPE 
          ) 

is 
begin 
    select op.country_plats_id, op.message, of_owner.p_ru.getRemoteUnitCurrentIP(recipient_msisdn) 
    into p_msg_id, p_message, p_ip_address 
    from lopes.country_plats op 
    where ((op.status ='R') 
     or ((op.status = 'P') 
     and (op.outgoing_date+(of_owner.p_ru.getPsdRetryDelay(op.recipient_msisdn)/(60*24)) <= sysdate) 
     ) 
     ) 
    and rownum=1 
    order by request_date asc; 

    update lopes.country_plats 
    set outgoing_date = sysdate 
    , status = decode(remaining_retry_nbr, 0, 'F', 'P') 
    , remaining_retry_nbr = remaining_retry_nbr-1 
    where country_plats_id = p_msg_id; 

exception when no_data_found then 
    p_msg_id := -1; 
    p_ip_address:= ''; 
    p_message := ''; 
end; 

procedure getNextMsgToSendByImei(p_imei IN VARCHAR2, 
          p_message IN OUT VARCHAR2, 
          p_msg_id IN OUT NUMBER 
          ) is 
    p_vehicle_id number(10); 
    p_msisdn varchar2(50); 
begin 

    p_msg_id := -1; 
    p_message := ''; 

    select msisdn, vehicle_id 
    into p_msisdn, p_vehicle_id 
    from of_owner.remote_unit, of_owner.vehicle 
    where remote_unit.imei = p_imei 
    and remote_unit.remote_unit_id = vehicle.remote_unit_id(+); 

    begin 
    select op.country_plats_id, op.message 
    into p_msg_id, p_message 
    from lopes.country_plats op 
    where ((op.status ='R') 
     or ((op.status = 'P') 
      and (op.outgoing_date+(of_owner.p_ru.getPsdRetryDelay(op.recipient_msisdn)/(60*24)) <= sysdate) 
      ) 
     ) 
    and op.recipient_msisdn = p_msisdn 
    and rownum=1 
    order by request_date asc; 

    update lopes.country_plats 
    set outgoing_date = sysdate 
     , status = decode(remaining_retry_nbr, 0, 'F', 'P') 
     , remaining_retry_nbr = remaining_retry_nbr-1 
    where country_plats_id = p_msg_id; 
    exception when others then 
    null; 
    end; 
    -- Check if garmin message to send 
    if (p_msg_id=-1) and (p_vehicle_id is not null) then 
    p_msg_id := of_owner.p_gu_message.getNextMessageToSend(p_vehicle_id, p_message); 
    if (p_msg_id is null) then 
     p_msg_id:=-1; 
    end if; 
    end if; 

exception when no_data_found then 
    p_msg_id := -1; 
    p_message := ''; 
end; 

procedure setStatus(p_msg_id IN NUMBER, p_status IN VARCHAR2) 
is 
begin 

    update lopes.country_plats 
    set status = decode(p_status, 'S', 'S', decode(remaining_retry_nbr, 0, 'F', 'P')) 
    where country_plats_id = p_msg_id;  

end; 

procedure cancel_scheduled_actions is 
begin 
    delete from lopes.country_plats 
    where status = 'R' 
    and ac_scheduled_action_id is not null; 
end; 

procedure cancel_scheduled_actions(p_msg_id IN number) is 
begin 
    delete from lopes.country_plats 
    where country_plats_id = p_msg_id; 
end; 

end P_COUNTRY_PLATS; 
/
+0

'/ 'パッケージ指定を終了する'; END; '文の後の改行の文字。そして、パッケージ本体の最後でそれを 'end PLATS;'に変更し、 '/'を次の改行に入れます。 – MT0

+1

HUH?タイトル:**エラー(3,34):PLS-00201:識別子XXXは宣言する必要があります**メッセージ本文内:**エラー(1,35):PLS-00304: 'P_COUNTRY_PLATS'の本体をその仕様なしでコンパイルできません**。異なるエラーコード(201対304)、異なるエラーメッセージ - 明らかに2つのエラーは、コードと異なる性質(行3、位置34対行1、位置35)が異なることは明らかです。それはどちらですか?そしてどうしたの? ( "これはあなたの体に説明されているような1つのエラーについてのメッセージを投稿し、全く異なるエラーでタイトルをつけていることです) – mathguy

+0

@en Lopes - PL-00201かPLS-00304の​​どちらに取り組むべきですか? – g00dy

答えて

1

/文字は、PL/SQLブロックの終端であり、あなたのスクリプトは、それらが不足しています。

変更:

end; 


create or replace PACKAGE BODY      "P_COUNTRY_PLATS" is 

へ:

end; 
/

create or replace PACKAGE BODY      "P_COUNTRY_PLATS" is 

と変更最終:

end;PLATS 

へ:入れ

end P_COUNTRY_PLATS; 
/
+0

この男のタイトルとメッセージ本文の内容が一致していないことに気付きましたか? – mathguy

関連する問題