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
相关产品推荐
相关产品推荐

