创建引用USER_SEQUENCES(SEQUENCE_NAME)的Oracle外键约束?

时间:2017-02-02 16:47:07

标签: oracle

我想创建一个带有列的表,该列引用我也创建的序列的名称。理想情况下,我想要一个强制执行此操作的外键约束。我试过了

create table testtable (
  sequence_name varchar2(128),
  constraint testtableconstr
    foreign key (sequence_name)
    references user_sequences (sequence_name)
    on delete set null
);

但我得到SQL Error: ORA-01031: insufficient privileges。我怀疑这是不可能的,或者我需要添加像on update cascade这样的东西。当我在这个表中插入行时,我可以做什么来强制执行此约束?

2 个答案:

答案 0 :(得分:0)

我对你在这里要实现的目标感到有些困惑 - 一个序列(实际上)只有一个值,下一个要分配的数字,而不是之前分配的所有值。

如果您只是想确保从序列中填充关系中的属性,那么触发器将是正确的方法。

答案 1 :(得分:0)

我假设您正在尝试构建某种部署管理系统,以跟踪您的架构对象,包括序列。

要执行您的要求,您可以探索以下选项之一:

  1. 在每次部署后运行报告,比较表格与数据字典视图中的值,并列出任何差异。

  2. 创建一个DDL触发器,无论何时创建序列,都会自动执行插入操作。

  3. 在表格中添加一个触发器,对序列视图进行查询,如果找不到则引发异常。