使用 PL/SQL 创建函数

Creating a function using PL/SQL

我有以下 table:

create table movie(
    movie_id integer primary key,
    title varchar(500) not null,
    kind varchar(30),
    year integer not null
);

我想创建一个函数:

addMovie(title, kind, year)

该函数必须在影片 table 中插入一个具有唯一性 movie_id 的新行,然后 return movie_id。

这是我第一次使用 PL/SQL,所以我现在有点迷茫 - 到目前为止找不到任何(好的)示例。

谢谢!

你的函数需要做 3 件事

  • 生成唯一的电影 ID
  • 插入 table
  • Return生成的id

让我们一步一个脚印

生成唯一的电影 ID

最好的方法是使用一个序列,它会为您生成一个 ID。查找 sequences

插入 table

这是通过直接插入完成的。由于电影id是由序列生成的,所以我们在insert语句中使用sequence_name.nextval。因此插入语句看起来像

INSERT INTO movie(movie_id, title, kind, year) values (movie_id_seq.nextval, title, kind, year) 

Return 返回生成的id

你可以利用Returning clause in a DML将生成的idreturn放回一个变量中。然后使用 RETURN 语句将 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,您不能将此函数用作查询的一部分。