2009-08-14 68 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语句和少两个变量声明。还要改变程序的名称,你写程序而不是程序。我也改变了你的程序的第一个参数的类型。