sql - 如何拒绝在 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
我需要写什么代替'????'?
解决方案
来自 Arioch 的评论:
我相信基本上这是一个由几个较小的操作组成的复杂操作:其中一个是创建一个裸表,而后一个步骤是“添加主键类型的约束”,因此表触发器可能会过早启动。
但如果你仍然想这样做,你可以使用:
if (rdb$get_context('DDL_TRIGGER', 'SQL_TEXT') not containing 'PRIMARY KEY') then
exception e_table_without_pk;
注意:这仅适用于 Firebird 3
推荐阅读
- javascript - 如何通过编号的 id 获取多个输入的值并将它们插入 MySQL
- css - 减慢背景动画CSS?
- javascript - Ionic 4 文本选择不流畅
- jndi - 从 JDK 11 客户端到 Weblogic 10.3.6 (JDK 7) 服务器的简单 JNDI 查找不起作用
- javascript - HTML 输入类型编号 - 我如何知道“步骤”功能触发了更改事件?
- performance - 如何计算理论上最大的 CPU-RAM 带宽?
- python-3.x - 使用 Python、Pandas 和 Matplotlib 难以对条形图进行分组
- r - R:用for循环在另一个字符串旁边找到一个特定的字符串
- pumping-lemma - 泵浦引理线性上下文无关语言的证明
- kotlin - 在 kotlin js 中加载资源文件(json)