使用PL / SQL创建函数

时间:2015-03-02 08:41:41

标签: database oracle stored-procedures plsql

我有下表:

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,所以我现在有点迷失 - 到目前为止找不到任何(好的)例子。

谢谢!

1 个答案:

答案 0 :(得分:1)

你的功能需要做3件事

  • 生成唯一电影ID
  • 插入表格
  • 返回生成的ID

让我们一步一步

生成唯一的电影ID

最好的方法是使用一个为你生成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) 

返回生成的ID

您可以使用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,您无法将此功能用作查询的一部分。