str*_*ger 6 oracle stored-procedures plsql
这是我创建的表:
CREATE TABLE Toy
(Toy_No NUMBER PRIMARY KEY,
Toy_Name VARCHAR(30) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
这是我创建的序列:
CREATE SEQUENCE toy_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用输出参数创建一个简单的存储过程:
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;
Run Code Online (Sandbox Code Playgroud)
但我收到编译错误。错误可能在哪里?
有几个错误。
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)。尽管这不是编译错误,但与依赖解析规则相比,限定变量总是要好得多:
INSERT INTO Toy (Toy_No,Toy_Name)
VALUES (insert_toys.toy_id,insert_toys.toy_name);
Run Code Online (Sandbox Code Playgroud)
该过程有 2 个参数,应该这样调用。
set serveroutput on;
declare new_id NUMBER;
BEGIN
insert_toys(new_id,'name2');
dbms_output.put_line(new_id); --print value of new id
END;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73226 次 |
最近记录: |