PLS-00103: 为序号 oracle 创建触发器
PLS-00103: Create trigger for sequence number oracle
我有这个脚本。基本上在table.
中增加一个主键
CREATE OR REPLACE FORCE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA
FOR EACH ROW
DECLARE
m_next_seq_num NUMBER := 0;
BEGIN
IF :new.SEQUENCE_NUMBER is null THEN
select
ADV_SN_MAP_UNIT_RELA_SEQ.NextVal
into m_next_seq_num
from dual;
:new.SEQUENCE_NUMBER := m_next_seq_num;
END IF;
END;
当在 sqlplus (cmd) 上 运行 时,我得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/28 PLS-00103: Encountered the symbol "end-of-file" when expecting
one of the following:
* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
不确定错误到底是什么?
删除关键字 FORCE
。触发器不存在该选项。 (虽然我希望这样做 - 有时在 table 或序列存在之前创建触发器会很好。)
如果您的数据库版本为 11g 或更高。
然后使用可简化代码并提高工作效率的新功能。
CREATE OR REPLACE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA
FOR EACH ROW
DECLARE
BEGIN
IF :new.SEQUENCE_NUMBER is null THEN
:new.SEQUENCE_NUMBER := ADV_SN_MAP_UNIT_RELA_SEQ.NextVal;
END IF;
END;
我有这个脚本。基本上在table.
中增加一个主键CREATE OR REPLACE FORCE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA
FOR EACH ROW
DECLARE
m_next_seq_num NUMBER := 0;
BEGIN
IF :new.SEQUENCE_NUMBER is null THEN
select
ADV_SN_MAP_UNIT_RELA_SEQ.NextVal
into m_next_seq_num
from dual;
:new.SEQUENCE_NUMBER := m_next_seq_num;
END IF;
END;
当在 sqlplus (cmd) 上 运行 时,我得到:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/28 PLS-00103: Encountered the symbol "end-of-file" when expecting
one of the following:
* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
不确定错误到底是什么?
删除关键字 FORCE
。触发器不存在该选项。 (虽然我希望这样做 - 有时在 table 或序列存在之前创建触发器会很好。)
如果您的数据库版本为 11g 或更高。 然后使用可简化代码并提高工作效率的新功能。
CREATE OR REPLACE TRIGGER SISD_OWNER.TRG_SN_MAP_UNIT_RELA_SEQ
BEFORE INSERT ON SISD_OWNER.ADV_SN_MAP_UNIT_RELA
FOR EACH ROW
DECLARE
BEGIN
IF :new.SEQUENCE_NUMBER is null THEN
:new.SEQUENCE_NUMBER := ADV_SN_MAP_UNIT_RELA_SEQ.NextVal;
END IF;
END;