首页 > 解决方案 > 如何拒绝在 Firebird 中创建没有主键的表

问题描述

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

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

我的代码如下所示:

create trigger trg_no_pk_table
before CREATE TABLE
as
begin

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

我需要写什么代替'????'?

标签: sqlprimary-keyfirebirddatabase-triggerfirebird2.5

解决方案


来自 Arioch 的评论:

我相信基本上这是一个由几个较小的操作组成的复杂操作:其中一个是创建一个裸表,而后一个步骤是“添加主键类型的约束”,因此表触发器可能会过早启动。

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

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

注意:这仅适用于 Firebird 3


推荐阅读