程序问题

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
我在这里先向您的帮助表示感谢     
已邀请:
“V_warehouse_id”没有在任何地方声明。     
您的ORA-00984错误意味着:   列名用于   在不允许的情况下表达,   例如在一个的VALUES子句中   INSERT语句。 检查INSERT的VALUES部分以确保没有参数是列。 解决之后,看看是否有其他错误消失了。 “PL / SQL:忽略SQL语句”似乎在已经出现另一个错误之后出现。     
您可以重写(未经测试):
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语句和两个较少的变量来声明。同时更改程序的名称,编写程序而不是程序。我还更改了过程的第一个参数的类型。     

要回复问题请先登录注册