2009-08-14 5 views
0
create or replace 
PROCEDURE XXB_RJT_HEADER_PROCEURE 
    (
    V_PROD_ID IN NUMBER, 
    V_WARE_ID IN XXB_RJT_HEADER.WAREHOUSE_ID% TYPE, 
    V_PAY_METH IN XXB_RJT_HEADER.PAYMENT_METHOD% TYPE, 
    V_PAY_STAT IN XXB_RJT_HEADER.PAYMENT_STATUS% TYPE, 
    V_ORD_ID IN XXB_RJT_HEADER.ORDER_ID% TYPE, 
    V_ORD_DT IN XXB_RJT_HEADER.ORDER_DATE% TYPE) 
AS 
    V_PROD_NM VARCHAR2(50); 
    V_WAR_NM VARCHAR2(15); 
BEGIN 
    SELECT PRODUCT_CAT 
    INTO V_PROD_NM 
    FROM xxb_rjt_inventory 
    WHERE XXB_RJT_INVENTORY.product_id= V_prod_id; 
    SELECT WAREHOUSE_NAME 
    INTO V_WAR_NM 
    FROM xxb_rjt_inventory 
    WHERE XXB_RJT_INVENTORY.product_id= V_prod_id; 

    INSERT 
    INTO XXB_RJT_HEADER 
    (     /*second error*/ 
     warehouse_id, 
     PAYMENT_METHOD, 
     payment_status, 
     product_name, 
     order_id, 
     wareshouse_name, 
     order_date 
    ) 
    VALUES 
    (
     V_warehouse_id, 
     v_pay_meth, /*First error*/ 
     V_pay_stat, 
     V_prod_nm, 
     V_ord_id, 
     V_war_nm, 
     V_ord_dt 
    ); 



END XXB_RJT_HEADER_PROCEURE; 

, wenn ich diese kompilieren bekomme ich folgende FehlerVerfahren Problem

Error(37,7): PL/SQL: ORA-00984: column not allowed here 

Error(24,65530): PL/SQL: SQL Statement ignored 

Dank für die Hilfe im Voraus

+0

Als Hinweis wird das Bit CREATE OR REPLACE nicht gezählt, wenn ermittelt wird, für welche Zeile ein Fehler gemeldet wird. –

Antwort

4

"V_warehouse_id" ist nirgendwo deklariert.

+0

thx eine million, was für ein dummer fehler noch war es eine stunde hinter ihm thx noch einmal verschwenden – Orapps

2

Ihr ORA-00984 Fehler means:

Ein Spaltenname wurde in einem Ausdruck verwendet, wo es nicht zulässig ist, wie in der VALUES-Klausel von einem INSERT-Anweisung.

Überprüfen Sie den VALUES-Teil des INSERT, um sicherzustellen, dass keines der Argumente Spalten sind.

Sobald Sie das beheben, sehen Sie, ob der andere Fehler weggeht. "PL/SQL: SQL-Anweisung ignoriert" scheint zu erscheinen, nachdem bereits ein anderer Fehler aufgetreten ist.

2

Sie umschreiben kann, ist in so etwas wie (nicht getestet):

create or replace 
PROCEDURE XXB_RJT_HEADER_PROCEURE 
    (
    V_PROD_ID IN xxb_rjt_inventory.product_id%type, 
    V_WARE_ID IN XXB_RJT_HEADER.WAREHOUSE_ID% TYPE, 
    V_PAY_METH IN XXB_RJT_HEADER.PAYMENT_METHOD% TYPE, 
    V_PAY_STAT IN XXB_RJT_HEADER.PAYMENT_STATUS% TYPE, 
    V_ORD_ID IN XXB_RJT_HEADER.ORDER_ID% TYPE, 
    V_ORD_DT IN XXB_RJT_HEADER.ORDER_DATE% TYPE) 
AS 
BEGIN 

    INSERT 
    INTO XXB_RJT_HEADER 
    (     
     warehouse_id, 
     PAYMENT_METHOD, 
     payment_status, 
     product_name, 
     order_id, 
     wareshouse_name, 
     order_date 
    ) 
    select 
     V_ware_id, 
     v_pay_meth, 
     V_pay_stat, 
     product_cat, 
     V_ord_id, 
     warehouse_name, 
     V_ord_dt 
    from xxb_rjt_inventory 
    where product_id= V_prod_id; 

END XXB_RJT_HEADER_PROCEURE; 

Das bedeutet, zwei weniger SQL-Anweisungen und zwei weniger Variablen zu erklären. Ändern Sie auch den Namen der Prozedur, Sie schreiben Prozedur statt Prozedur. Ich habe auch den Typ des ersten Parameters Ihrer Prozedur geändert.