错误在下面发布的代码的第5行中 我无法识别错误, 但是,触发器可以完美创建,并且还可以按照代码中的说明修改表值
create or replace trigger "SERVICE_T1"
BEFORE
insert on "SERVICE"
for each row
begin
SELECT 'S'||to_char(SERVICE_ID_SEQ.nextval,'fm00000000')
INTO :new.service_id
FROM service
end;
/
错误在下面发布的代码的第5行中 我无法识别错误, 但是,触发器可以完美创建,并且还可以按照代码中的说明修改表值
create or replace trigger "SERVICE_T1"
BEFORE
insert on "SERVICE"
for each row
begin
SELECT 'S'||to_char(SERVICE_ID_SEQ.nextval,'fm00000000')
INTO :new.service_id
FROM service
end;
/
我的看法,这一行
FROM service
应该是
FROM dual;
演示:
SQL> create table service (service_id varchar2(50));
Table created.
SQL> create sequence service_id_seq;
Sequence created.
SQL> create or replace trigger "SERVICE_T1"
2 BEFORE insert on "SERVICE"
3 for each row
4 begin
5 SELECT 'S'||to_char(SERVICE_ID_SEQ.nextval,'fm00000000')
6 INTO :new.service_id
7 FROM dual;
8 end;
9 /
Trigger created.
SQL> insert into service values ('A');
1 row created.
SQL> select * From service;
SERVICE_ID
--------------------------------------------------
S00000001
SQL>
或者更好的是,完全避免使用select
:
SQL> create or replace trigger "SERVICE_T1"
2 BEFORE insert on "SERVICE"
3 for each row
4 begin
5 :new.service_id := 'S'||to_char(SERVICE_ID_SEQ.nextval,'fm00000000');
6 end;
7 /
Trigger created.
SQL>