You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebird 2.5中获取完整的存储过程DDL(含参数与主体)

获取Firebird 2.5存储过程完整DDL的正确方法

Firebird的RDB$PROCEDURE_SOURCE字段本身只存储存储过程的主体代码(变量声明+执行逻辑),不包含CREATE OR ALTER开头的定义和SET TERM指令,所以得换方式获取完整DDL:

方法1:用Firebird自带的GEN_DDL存储过程

这是最省心的方式,Firebird内置的GEN_DDL可以直接生成包含完整创建声明的存储过程DDL。调用示例:

SELECT DDL FROM GEN_DDL('PROCEDURE', '你的存储过程名称')

返回的结果会包含CREATE OR ALTER PROCEDURE开头的完整定义,以及参数、主体代码,直接就能用来修改存储过程。

方法2:手动拼接DDL(如果不想依赖GEN_DDL)

如果需要自己控制生成逻辑,可以从系统表拼接完整语句:

  1. 获取存储过程的基本信息和参数:
    SELECT 
        p.RDB$PROCEDURE_NAME,
        pp.RDB$PARAMETER_NAME,
        pp.RDB$PARAMETER_TYPE, -- 0=输入参数,1=输出参数
        ft.RDB$TYPE_NAME,
        pp.RDB$FIELD_LENGTH,
        pp.RDB$FIELD_PRECISION
    FROM RDB$PROCEDURES p
    JOIN RDB$PROCEDURE_PARAMETERS pp ON p.RDB$PROCEDURE_NAME = pp.RDB$PROCEDURE_NAME
    JOIN RDB$FIELD_TYPES ft ON pp.RDB$FIELD_TYPE = ft.RDB$FIELD_TYPE AND COALESCE(pp.RDB$FIELD_SUB_TYPE, 0) = ft.RDB$FIELD_SUB_TYPE
    WHERE p.RDB$SYSTEM_FLAG = 0 AND p.RDB$PROCEDURE_NAME = '你的存储过程名称'
    ORDER BY pp.RDB$PARAMETER_NUMBER
    
  2. 拼接创建语句:
    先拼CREATE OR ALTER PROCEDURE 存储过程名 (,然后把参数按参数名 类型 [OUTPUT]的格式拼接,接着加AS,最后把RDB$PROCEDURE_SOURCE的内容接在后面。

关于SET TERM的说明

SET TERM是客户端工具(比如IBExpert、FlameRobin)用来临时改变SQL语句终止符的指令,Firebird服务器本身并不执行这个指令,所以系统表不会存储它。如果你的应用需要生成带SET TERM的脚本,自己在生成的DDL前后加上即可,比如:

SET TERM ^ ;
CREATE OR ALTER PROCEDURE 你的存储过程名 (...)
AS
BEGIN
   -- 存储过程主体
END^
SET TERM ; ^

内容的提问来源于stack exchange,提问作者Thiago Rodrigo da Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:47:17