我有下表:
create table movie(
movie_id integer primary key,
title varchar(500) not null,
kind varchar(30),
year integer not null
);
我想创建一个函数:
addMovie(title, kind, year)
该函数必须使用唯一的movie_id将新行插入影片表,然后返回movie_id。
这是我第一次使用PL / SQL,所以我现在有点迷失 - 到目前为止找不到任何(好的)例子。
谢谢!
答案 0 :(得分:1)
你的功能需要做3件事
让我们一步一步
最好的方法是使用一个为你生成id的seqeuence。查看sequences
这是通过简单的插入完成的。由于movie ID是由序列生成的,因此我们在insert语句中使用sequence_name.nextval
。因此insert语句看起来像
INSERT INTO movie(movie_id, title, kind, year) values (movie_id_seq.nextval, title, kind, year)
您可以使用Returning clause in a DML将生成的ID返回给变量。然后使用RETURN语句返回值。
这就是你的功能看起来像
FUNCTION addmovie(p_title,
p_kind,
p_year)
RETURN NUMBER
IS
v_id movie.id%TYPE;
BEGIN
INSERT INTO movie
(
movie_id,
title,
kind,
year
)
VALUES
(
movie_id_seq.NEXTVAL,
p_title,
p_kind,
p_year
)
returning id
INTO v_id;
RETURN v_id;
END;
请注意,这是一个相当基本的功能,没有错误检查,异常处理 - 我会留给您。
请注意,max(movie_id)+1不是转发目的的最佳方式。你需要
SELECT max(movie_id)+1 into v_id from movies;
插入语句之前的。
此外,由于DML,您无法将此功能用作查询的一部分。