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

IBMi SQL存储过程如何设置数字的逗号与小数点格式?

IBM i 中SQL存储过程的小数点分隔符设置问题

在IBM i环境里,数字默认用逗号分隔整数和小数部分(比如123,45),而非英美习惯的小数点,这会导致SQL函数执行报错。举个例子,执行以下SQL语句:

SUBSTR(MySTRING,1,1)

会收到报错信息:

SQL0104 30 12 Position 1 Token ,1 was not valid. Valid tokens: ) ,.

已知STRSQL支持会话级的小数点设置(可选值包括*Comma、*Period、*Job等),下面说明SQL存储过程里如何设置,让小数分隔符按英美习惯工作:

  • 存储过程定义时指定:在存储过程头部用SET OPTION语句直接设置小数分隔符,示例代码如下:

    CREATE OR REPLACE PROCEDURE MY_PROC()
    LANGUAGE SQL
    SET OPTION DECIMAL_POINT = *PERIOD
    BEGIN
        -- 这里写存储过程的业务逻辑
        DECLARE temp_var VARCHAR(10);
        SET temp_var = SUBSTR('EXAMPLE_TEXT', 1, 1);
        SELECT temp_var FROM SYSIBM.SYSDUMMY1;
    END;
    

    这个设置会让当前存储过程强制使用小数点作为分隔符,不受作业默认配置的影响。

  • 作业级全局设置:如果希望整个作业都生效,可以先执行CL命令修改作业属性:

    CHGJOB DECPNT(*PERIOD)
    

    之后调用存储过程时,会话会自动继承这个小数点设置。

  • 会话临时切换:在调用存储过程前,执行SQL语句临时切换当前会话的小数分隔符:

    SET CURRENT DECIMAL SEPARATOR = '.';
    CALL MY_PROC();
    

    这个设置仅在当前会话有效,执行完后可以根据需要改回原分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:52:08