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

PostgreSQL带默认参数的函数声明语法错误求助

PostgreSQL函数声明语法错误修复

问题根源

  1. 参数约束与默认值顺序错误:PostgreSQL要求参数的NOT NULL约束必须放在DEFAULT默认值之前,你写的DEFAULT 'N' is NOT NULL(CREATE语句)和DEFAULT 'N' NOT NULL(DROP语句)违反语法规范,且CREATE语句中多了冗余的is关键字。
  2. DROP与CREATE的参数定义不匹配:删除函数时的参数列表必须和创建时完全一致,否则会导致函数识别异常。

修正后的代码片段

删除函数语句

DROP FUNCTION IF EXISTS pfi_pilot.fr_GetCrossTrades(
    IN par_from_dt TIMESTAMP WITHOUT TIME ZONE, 
    IN par_to_dt TIMESTAMP WITHOUT TIME ZONE, 
    IN par_asset_classes VARCHAR(255) DEFAULT 'ALL', 
    IN par_debug CHAR(255) NOT NULL DEFAULT 'N', 
    IN return_code int DEFAULT NULL, 
    IN p_refcur refcursor DEFAULT NULL, 
    IN p_refcur_2 refcursor DEFAULT NULL, 
    IN p_refcur_3 refcursor DEFAULT NULL, 
    IN p_refcur_4 refcursor DEFAULT NULL, 
    IN p_refcur_5 refcursor DEFAULT NULL
);

创建/替换函数语句

CREATE OR REPLACE FUNCTION pfi_pilot.fr_GetCrossTrades(
    IN par_from_dt TIMESTAMP WITHOUT TIME ZONE, 
    IN par_to_dt TIMESTAMP WITHOUT TIME ZONE, 
    IN par_asset_classes VARCHAR(255) DEFAULT 'ALL', 
    IN par_debug CHAR(255) NOT NULL DEFAULT 'N', 
    IN return_code int DEFAULT NULL, 
    IN p_refcur refcursor DEFAULT NULL, 
    IN p_refcur_2 refcursor DEFAULT NULL, 
    IN p_refcur_3 refcursor DEFAULT NULL, 
    IN p_refcur_4 refcursor DEFAULT NULL, 
    IN p_refcur_5 refcursor DEFAULT NULL
)
-- 补充函数返回类型和实现逻辑,示例如下
RETURNS SETOF record AS $$
BEGIN
    -- 编写你的函数业务逻辑
    RETURN;
END;
$$ LANGUAGE plpgsql;

重点修正说明

  • 调整par_debug参数定义:将DEFAULT 'N' is NOT NULL改为NOT NULL DEFAULT 'N',移除冗余的is关键字,符合PostgreSQL参数声明语法。
  • 保证DROP和CREATE语句的参数定义完全一致,避免函数匹配失败。
  • 注意:你提供的原始CREATE语句缺少返回类型和函数体,完整函数必须补充这两部分才能正常执行。

内容的提问来源于stack exchange,提问作者jack gell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:40:27