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 :(得分:4)
“V Warehouse_id”未在任何地方声明。
答案 1 :(得分:2)
您的ORA-00984错误means:
列中使用了一个列名 在不允许的情况下表达, 例如在一个的VALUES子句中 INSERT语句。
检查INSERT的VALUES部分以确保所有参数都不是列。
修复后,查看其他错误是否消失。 “PL / SQL:忽略SQL语句”似乎在已经出现另一个错误之后出现。
答案 2 :(得分: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语句和两个少量变量来声明。同时更改程序的名称,编写程序而不是程序。我还更改了过程的第一个参数的类型。