2009-08-14 6 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; 

quand je compile ce j'obtenir les erreurs suivantesproblème procédure

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

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

merci pour l'aide à l'avance

+0

Comme indice, le bit CREATE OR REPLACE ne compte pas lors de la détermination de la ligne pour laquelle une erreur est signalée. –

Répondre

4

"V_warehouse_id" n'est déclaré nulle part.

+0

thx un million quelle erreur idiote était encore gaspiller une heure derrière elle thx une fois de plus – Orapps

2

Votre erreur ORA-00984 means:

Un nom de colonne a été utilisé dans une expression où il n'est pas autorisé, comme dans la clause VALUES d'un Instruction INSERT.

Vérifiez la partie VALUES de l'INSERT pour vous assurer qu'aucun des arguments n'est une colonne. Une fois que vous corrigez cela, voir si l'autre erreur disparaît.

"PL/SQL: instruction SQL ignorée" semble apparaître après une autre erreur.

2

Vous pouvez réécrire est quelque chose comme (non testé):

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; 

Cela signifie deux moins d'instructions SQL et deux variables moins à déclarer. Changez aussi le nom de la procédure, vous écrivez proceure au lieu de la procédure. J'ai également changé le type du premier paramètre de votre procédure.

Questions connexes