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

AS400 SQL中如何在自定义函数内调用存储过程

解决方案

方案1:优先使用标量UDF实现(最简便,适配V5R6版本)

你的需求本质是单输入参数返回单文字结果,无需使用表函数,直接创建标量自定义函数即可,语法完全兼容V5R6版本:

CREATE FUNCTION CONVERT_TO_WORDS(INPUT_NUM CHAR(14))
RETURNS CHAR(256)
LANGUAGE SQL
DETERMINISTIC
BEGIN
    DECLARE OUT_WORDS CHAR(256);
    CALL NUMBER_TO_WORDS(INPUT_NUM, OUT_WORDS);
    RETURN OUT_WORDS;
END

调用方式更简洁:

SELECT CONVERT_TO_WORDS('123456') AS WORDS FROM SYSIBM.SYSDUMMY1

方案2:如果必须保留表函数形式

V5R6版本的SQL表函数不支持直接将CALL语句作为返回值,需要使用管道输出的写法实现:

CREATE FUNCTION CONVERT_TO_WORDS(INPUT_NUM CHAR(14))
RETURNS TABLE (NUMBER CHAR(14), WORDS CHAR(256))
LANGUAGE SQL
DETERMINISTIC
BEGIN
    DECLARE OUT_WORDS CHAR(256);
    CALL NUMBER_TO_WORDS(INPUT_NUM, OUT_WORDS);
    PIPE (INPUT_NUM, OUT_WORDS);
    RETURN;
END

调用方式和你的预期基本一致,注意V5R6中TABLE关键字后需要用括号包裹函数:

SELECT WORDS FROM TABLE(CONVERT_TO_WORDS('123456')) AS T

注意事项

  • 如果原存储过程NUMBER_TO_WORDS存在副作用(如修改表数据、产生提交点),需要将函数的DETERMINISTIC参数改为NOT DETERMINISTIC,同时添加MODIFIES SQL DATA参数
  • 函数创建前需确认当前账号拥有CREATE FUNCTION权限,以及对NUMBER_TO_WORDS存储过程的调用权限

内容的提问来源于stack exchange,提问作者Oscar A. Vaccarezza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:45:00