【发布时间】:2013-12-01 19:32:39
【问题描述】:
我有许多触发器可以做各种各样的事情,但在所有具有唯一整数主键的触发器中,我需要它们自动递增。目前代码如下:
IF :NEW.student_id IS NULL THEN
SELECT seq_student_id.nextval
INTO :NEW.student_id
FROM sys.dual;
END IF;
我认为为此创建一个小函数可能会很有用,就像这是一种传统的编程语言一样。但是,我不确定如何将参数传递到它们需要去的地方以允许函数正确运行。理想情况下,我希望能够在顶部调用 AUTO_INCREMENT(student_id),并进行如下运行(目前不起作用):
create or replace function "AUTO_INCREMENT"
(field in VARCHAR2)
return BOOLEAN
is
begin
IF ':NEW'.field IS NULL THEN
SELECT 'seq_'||field.nextval
INTO :NEW.field
FROM sys.dual;
END IF;
return true;
end;
任何帮助使此功能按我期望的方式工作将不胜感激。我是 PL/SQL 的新手,我认为这将是一个很好的选择功能介绍(如果这是我应该使用它们的地方)。谢谢。
【问题讨论】:
-
你需要在你的函数中使用动态SQL。
-
有什么理由有一个功能呢?你为什么要不覆盖任何人正在输入的内容? If you're creating a surrogate key you need to ensure that the users don't use up values that you haven't yet.
-
这种方法的一个问题是您无法使用 Oracle 的数据字典来查看是否正在使用序列以及在何处使用。
标签: sql oracle function arguments auto-increment