Oracle 为什么我得到PLS-00049:Apex中的坏绑定变量
我试图自动生成表电影的主键值,但在创建触发器时出现此错误Oracle 为什么我得到PLS-00049:Apex中的坏绑定变量,oracle,sequence,Oracle,Sequence,我试图自动生成表电影的主键值,但在创建触发器时出现此错误 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 '
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表中肯定有列MOVIE\u ID,您当前的问题与表中列的(
MOVIE\u ID
)定义有关,正如卢卡斯指出的,应该引用(“MOVIE\u ID”
)
您的DB版本应该是12+
,因为CREATE SEQUENCE
的NOKEEP
选项在12c
之前不存在
在Oracle DB的version12c
中,序列的下一个值可能被设置为列的默认值
(不需要触发器):
如果尚未创建表,则可以执行以下操作:
create table "Movie"
(
"MOVIE_ID" int generated always as identity,
...
不需要您创建单独的序列(Oracle为您这样做)您当前的问题与表中列的(MOVIE\u ID
)定义相关,正如卢卡斯指出的,应该引用该定义(“MOVIE\u ID”
)
您的DB版本应该是12+
,因为CREATE SEQUENCE
的NOKEEP
选项在12c
之前不存在
在Oracle DB的version12c
中,序列的下一个值可能被设置为列的默认值
(不需要触发器):
如果尚未创建表,则可以执行以下操作:
create table "Movie"
(
"MOVIE_ID" int generated always as identity,
...
无需您创建单独的序列(Oracle为您这样做):new.“MOVIE\u ID”:=“MOVIE\u PK\u SEQ”.nextval代码>:新的“电影ID”:=“电影PK SEQ”。下一步代码>