为什么我得到 PLS-00049:Apex 中的绑定变量错误

Why I get PLS-00049: bad bind variable in Apex

我正在尝试为 table 电影 自动生成 PK 值,但在创建触发器时出现此错误

Compilation failed, line 2 (10:45:07) The line numbers associated with compilation errors 
are relative to the first BEGIN statement. This only affects the compilation of database 
triggers.
PLS-00049: bad bind variable 'NEW.MOVIE_ID' 

这是触发码

create or replace trigger "MOVIE_T1"
BEFORE
insert on "Movie"
for each row
begin
    :new.MOVIE_ID := MOVIE_PK_SEQ.nextval;
end;

这是序列码

CREATE SEQUENCE   "MOVIE_PK_SEQ"  
MINVALUE 1 MAXVALUE 999999 
INCREMENT BY 1 START WITH 1 
NOCACHE  NOORDER  NOCYCLE  NOKEEP  NOSCALE  GLOBAL

我的 MOVIE table

中肯定有 MOVIE_ID

您当前的问题与您专栏的 (MOVIE_ID) 在 table 中的定义有关,正如已经指出的那样,应该引用 ("MOVIE_ID") 作为 Lukasz。

您的数据库版本应该是 12+,因为 CREATE SEQUENCENOKEEP 选项直到 12c.

才存在

Oracle DB 版本 12c 中,序列的下一个值可能被设置为列

的默认值

(不需要触发器) :

alter table "Movie" modify "MOVIE_ID" default "MOVIE_PK_SEQ".nextval not null

如果 table 尚未创建,您可以这样做:

create table "Movie"
(
  "MOVIE_ID"  int generated always as identity,
  ...

无需您创建单独的序列(Oracle 为您完成)