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

當我編譯此,我得到了以下錯誤程序問題

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

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

感謝您的幫助提前

+0

作爲提示,CREATE OR REPLACE位在確定哪個行報告錯誤時不計算。 – 2009-08-15 21:43:14

回答

4

「V_warehouse_id」沒有聲明在任何地方。

+0

thx一百萬是一個愚蠢的錯誤,然後又一次浪費了一小時thx thx – Orapps 2009-08-14 21:23:19

2

您的ORA-00984錯誤means

列名被用在不允許的 表達式中, 如在VALUES子句中 INSERT語句。

檢查INSERT的VALUES部分以確保沒有參數是列。

解決該問題後,請查看其他錯誤是否消失。 「PL/SQL:SQL語句被忽略」似乎在出現另一個錯誤後出現。

2

可以重寫是像(未經測試):

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; 

這意味着少了兩個SQL語句和少兩個變量聲明。還要改變程序的名稱,你寫程序而不是程序。我也改變了你的程序的第一個參數的類型。