如何将 char 转换为 Informix 数据库中的数组?

Posted

技术标签:

【中文标题】如何将 char 转换为 Informix 数据库中的数组?【英文标题】:How to convert char into an array in Informix database? 【发布时间】:2010-07-19 15:43:46 【问题描述】:

我有一个这样的存储过程:

CREATE PROCEDURE Proc_Test(testvalue set(char(1000) not null))  RETURNING int;
        DEFINE z char(7000);
        LET z = ' ';

FOREACH
select * into z from table(testvalue)
END FOREACH;
return 1;
end procedure;

由于需求的变化,我想将此存储过程更改为:

CREATE PROCEDURE Proc_Test(testvalue char(7000) not null) RETURNING int;
            DEFINE z char(7000);
            LET z = ' ';
    CAST(cvg AS set(char(1000)));
    FOREACH
    select * into z from table(testvalue)
    END FOREACH;
    return 1;
    end procedure;

我遇到了一些未知的语法错误。

我知道错误在这里:

CAST(cvg AS set(char(1000)));

您知道将变量转换为另一种类型以在运行时转换它的更好方法吗?

【问题讨论】:

【参考方案1】:

困惑

您的程序到底应该做什么?据我所知,这是对“testvalue 中的字符串是否为 NULL”的扭曲测试?也许...实际上代码无条件返回 1,因此不清楚它是否甚至执行 null 测试,但该过程可能在 null 字符串上比在有值的字符串上执行得更快。

诊断

出现语法错误是因为 'cvg' 不是过程中定义的变量。此外,CAST 必须在作业的 RHS 或类似的东西上。而且我不清楚您是否可以通过强制转换将 CHAR(7000) 分解为一组中的七个 CHAR(1000) 字段。

修复?

但是,由于我不了解旧要求或新要求,因此我无法建议您该怎么做。

【讨论】:

好的,抱歉我没有提到存储过程的使用。这个存储过程只是一个测试,最重要的是我将制作业务逻辑。我这样做的原因是因为 JCC 驱动程序不支持以数组为参数的存储过程。所以如果我能够成功地将 char 变量转换为数组,我不再需要传递集合对象,事实上我可以传递一个 String 对象,然后我可以将它转换为 set 变量到存储过程本身。我希望它有所帮助。

以上是关于如何将 char 转换为 Informix 数据库中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何编译 Informix GLS 语言环境/字符集。 (将 .lc 文件转换为 .lco 以创建数据库的 Informix 语言环境)

在 Informix 中进行铸造

如何将此 Informix 嵌套联接转换为 tsql 嵌套联接?

将存储过程从 MS SQL Server 转换为 Informix

将 Informix 游标转换为 MSSQL 游标

将 Informix 查询转换为 Oracle?