【发布时间】:2014-04-23 12:29:35
【问题描述】:
我正在尝试创建触发器并收到错误“[Error] PLS-00357: PLS-00357: Table, View Or Sequence reference 'table_data_seq.nextval' not allowed in this context”
我已经阅读了很多关于错误的信息,但找不到人们所说的有效的 PL/SQL 和我的之间的区别。下面是我创建触发器的代码(尽可能保持基本以使其正常工作):
create or replace trigger tr_tabData
before insert on table_data
for each row
DECLARE
seq_value int;
begin
select table_data_sq.nextval into seq_value from dual;
end;
Oracle 版本为 10.2.0.5
按照这里的要求,它是序列的脚本:
DROP SEQUENCE DATA_ADMIN.TABLE_DATA_SQ;
CREATE SEQUENCE DATA_ADMIN.TABLE_DATA_SQ
START WITH 1000
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER;
【问题讨论】:
-
该错误通常意味着您在 PL/SQL 上下文中使用序列。例如,
seq_value := table_data_sq.nextval;在 10g 中不起作用,但在 11g 中起作用。但是您的代码使用的是老式的获取序列的方式,我不确定它为什么会失败。您是否粘贴了错误版本的代码? -
这是我的 toad for oracle sql 编辑器屏幕中的语句。我尝试运行它,我得到了上面的错误。
-
在 SQL*Plus 中运行它时会发生什么?这段代码在 11g 或 12c 上运行良好,但不幸的是我无法访问 10g 实例。
-
@user1567453 请同时显示序列 DDL。
-
这可能是您的 Toad 窗口中的代码,但如果您已对此进行了多次尝试,它可能仍会尝试重新编译旧版本——此时进行插入。将其更改为
create or replace trigger ...是否会更改(或消除)错误?
标签: triggers oracle10g sequence