如何在Firebird中拒绝没有主键的创建表

时间:2018-10-02 06:25:56

标签: sql primary-key firebird database-trigger firebird2.5

是否可以在Firebird 2.5中创建(DDL)触发器,该触发器将拒绝创建没有主键的表?

我在互联网上阅读了这篇文章https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-psql-ddltriggers.html和google,但是没有找到任何解决方案。

我的代码如下:

create trigger trg_no_pk_table
before CREATE TABLE
as
begin

if (rdb$get_context('DDL_TRIGGER', '??????') ???????) then
        exception e_table_without_pk;
end

我需要怎么写'????'?

1 个答案:

答案 0 :(得分:1)

来自Arioch的评论:

  

我相信基本上这是一个复杂的操作,包括   几个较小的:其中一个是创建一个裸表,还有一些   后面的步骤是“添加主键类型的约束”,因此表   触发器可能触发得太早。

但是,如果您仍然想这样做,可以使用:

if (rdb$get_context('DDL_TRIGGER', 'SQL_TEXT') not containing 'PRIMARY KEY') then
    exception e_table_without_pk;

注意:这仅在Firebird 3中有效