这是我创建的表:
CREATE TABLE Toy
(Toy_No NUMBER PRIMARY KEY,
Toy_Name VARCHAR(30) NOT NULL
);
这是我创建的序列:
CREATE SEQUENCE toy_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
然后我尝试使用输出参数创建一个简单的存储过程:
CREATE OR REPLACE PROCEDURE insert_toys(toy_id OUT NUMBER,toy_name VARCHAR(30))
AS
BEGIN
toy_id := seq_toy.NEXTVAL;
INSERT INTO Toy (Toy_No,Toy_Name)
VALUES (toy_id,toy_name);
END;
但我得到一个编译错误。错误可能在哪里?
有几个错误。
1. 指定过程参数时,不需要指定大小。例如,应该是
CREATE OR REPLACE PROCEDURE insert_toys(toy_id OUT NUMBER,toy_name VARCHAR )
,而不是.... VARCHAR(30))
2. 您创建了序列
CREATE SEQUENCE toy_seq
,但尝试使用不同名称的序列toy_id := seq_toy.NEXTVAL;
(toy_seq与seq_toy) 3. 参数名称与字段名称(Toy_Name)相同。即使它不是编译错误,与依赖解析规则相比,限定变量总是要好得多:该过程有 2 个参数,应该这样调用。