Oracle 用于新事务和订单的PL SQL存储过程
我给出了一小段代码,但在尝试为存储的Oracle pl sql过程创建新订单时,收到了以下错误。 第83行是代码中的insert语句,第84行是语句的insert部分Oracle 用于新事务和订单的PL SQL存储过程,oracle,variables,plsql,insert,Oracle,Variables,Plsql,Insert,我给出了一小段代码,但在尝试为存储的Oracle pl sql过程创建新订单时,收到了以下错误。 第83行是代码中的insert语句,第84行是语句的insert部分 INSERT INTO orders(o_id,c_id,p_id,s_id,order_date,o_qty,order_total,card_type,cc_number,exp_date,shipping_status) VALUES (orders_seq.nextval, c_c_id,c_p_id,s_id,sysd
INSERT INTO orders(o_id,c_id,p_id,s_id,order_date,o_qty,order_total,card_type,cc_number,exp_date,shipping_status)
VALUES (orders_seq.nextval, c_c_id,c_p_id,s_id,sysdate,c_p_qty,Totaldue,c_card_type,c_cc_number,c_exp_date,'Not shipped yet');
83/5 PL/SQL:SQL语句被忽略84/47 PL/SQL:ORA-00984:此处不允许列
BEGIN
--Initializing values for variables
x_rowcount := 0;
x_stockonhand := 0;
Totaldue := 0;
--Total due calculation
--(price of phone*quantity + shipping cost)*1.06 (assuming 6% sales tax)
Totaldue := (((i_price * c_p_qty) + i_shipping_cost) * 1.06);
SAVEPOINT start_transaction; -- mark a savepoint
--INSERT a new record into order table.
INSERT INTO orders(o_id,c_id,p_id,s_id,order_date,o_qty,order_total,card_type,cc_number,exp_date,shipping_status)
VALUES (orders_seq.nextval, c_c_id,c_p_id,s_id,sysdate,c_p_qty,Totaldue,c_card_type,c_cc_number,c_exp_date,'Not shipped yet');
检查您的申报部分。通常,在输入变量名或未声明变量时会出现此错误。例如:
SQL> create table tmp (id number, str varchar2(100));
Table created.
SQL> declare
a number;
begin
insert into tmp (id, str)
values (a, a1);
end;
/
values (a, a1);
*
ERROR at line 5:
ORA-06550: line 5, column 14:
PL/SQL: ORA-00984: column not allowed here
ORA-06550: line 4, column 3:
PL/SQL: SQL Statement ignored
错误是因为
值(…,…)
部分中的一个或多个值无效
我建议检查每一个,看看它们是否有效。例如,c_c_id
是否在代码中的其他地方声明并给定值?如果不是,这可能是你的问题。在将每个值放入INSERT
语句的VALUES(…,…)
部分之前,需要声明并给定一个值
INSERT INTO orders(o_id,c_id,p_id,s_id,order_date,o_qty,order_total,card_type,cc_number,exp_date,shipping_status)
VALUES (orders_seq.nextval, c_c_id,c_p_id,s_id,sysdate,c_p_qty,Totaldue,c_card_type,c_cc_number,c_exp_date,'Not shipped yet');
我想你可能必须在插入之前先获得序列。因此,在将select orders_seq.nextval从dual插入myOrdersSeq之前,可能会出现类似的情况;(当然,您需要定义myOrderSeq)