创建表格:
CREATE TABLE CUSTOMER
(
CUST_NUM NUMBER PRIMARY KEY,
CUST_LNAME VARCHAR(15) NOT NULL,
CUST_FNAME VARCHAR(15) NOT NULL,
CUST_BALANCE NUMBER(9,2) DEFAULT 0.00
);
我创建了这个程序:
CREATE OR REPLACE PROCEDURE PRC_ADD_CUSTOMER
(IN cust_num INTEGER,
IN cust_lname varchar(15),
IN cust_fname varchar(15),
IN cust_balance number(9,2))
BEGIN
INSERT INTO CUSTOMER (CUST_NUM, CUST_LNAME, CUST_FNAME, CUST_BALANCE)
VALUES (cust_num, cust_lname, cust_fname, cust_balance);
COMMIT;
END;
/
我得到这个错误:
警告:创建的过程存在编译错误。
我该如何解决?谢谢你
2条答案
按热度按时间pdsfdshx1#
在Oracle中,您需要:
IN
位于参数的标识符之后;BEGIN
之间添加IS
(或AS
)关键字;VARCHAR
是VARCHAR2
的别名)。就像这样:
COMMIT
,因为它会阻止您将多个过程链接在一起,然后在后面的过程失败时对它们使用ROLLBACK
。相反,COMMIT
来自您用来调用过程的代码。fiddle
ojsjcaue2#
我得到的错误是:警告:创建的过程存在编译错误。我该如何解决?
如果你使用了一些GUI工具--比如TOAD或者SQL Developer --你会 * 直观地 * 知道你的代码有问题。例如,这是TOAD:
基本上,它说
IN
放错了位置(参数名在前,可选IN/OUT(或两者),数据类型没有精度)。如果使用命令行工具(如SQL*Plus)
你得自己找出错误的原因如何实现?通过查询
user_errors
:我不会一个错误一个错误地调试你的代码。这是一个编译和 * 工作 * 的代码:
请注意以下几点:
varchar2
数据类型(而不是varchar
)p_
)。对于插入操作,这并不重要,但对于更新,您可能会得到意想不到的结果