gpt4 book ai didi

SQL Informix 12.10FC6 - 一次转换多列多列,但不创建用户定义类型

转载 作者:行者123 更新时间:2023-12-05 06:15:04 24 4
gpt4 key购买 nike

我将展示我的工作成果以及我需要的帮助,如下所示

  1. [works] - 我在这里动态创建了一个 multiset,不需要创建用户定义的类型。SELECT * FROM TABLE(MULTISET{ ROW(100, 'Kline'), ROW(101, 'Smith'), ROW(102, 'Jones'), ROW(103, 'Brown')}) 申请人(aplicantid , lastname) INTO TEMP APPLICANT;但它之所以有效,是因为字符串名称的长度均为 5 个字符。

  2. [不起作用] 如果字符串大小不同,我将收到“未找到类型 %s,代码 -9628”,如:SELECT * FROM TABLE(MULTISET{ ROW(10, '软件开发人员') ,ROW(11, '业务分析师') ,ROW(12, '数据分析师') })

  3. [不充分的解决方案] 我刚刚能够通过单独转换每一行来克服第 2 项中的错误 SELECT * FROM TABLE ( MULTISET{ ROW(10, 'Software Developer')::ROW ( x int, y varchar(20) ) , ROW(11, '业务分析师')::ROW (x int, y varchar(20) ) , ROW(12, '数据分析师 ')::ROW (x int, y varchar(20) ) } )。对所有行重复相同的转换是非常令人沮丧的。

  4. [我需要的示例] 我需要一次转换整个 Multiset() 甚至 table() 但不需要创建用户定义的类型,就像我在第 3 项中所做的那样. 示例(不起作用)= SELECT * FROM TABLE(MULTISET{ ROW(10, 'Software Developer') ,ROW(11, 'Business Analyst') ,ROW(12, 'Data Analyst') } )::TABLE(MULTISET{ROW(x int, y varchar(20))}) 所以所有的内容都会被一次转换。

Ps:请服务器不要有datablade模块。

非常感谢。

最佳答案

我知道您早已离开,但为了其他任何搜索者的利益:

SELECT * FROM TABLE (
MULTISET{
ROW(10, 'Software Developer')
,ROW(11, 'Business Analyst')
,ROW(12, 'Data Analyst')
}::MULTISET( ROW( x int, y varchar(20) ) not null )
);

multiset{} 语法是与“软件开发人员”或“7”相同的文字MULTISET() 语法是类型定义。因此,鉴于我们正在创建一个强制转换,我们需要强制转换为类型而不是文字(就像 'software developer'::'7' 没有意义但 'software developer'::char(30) 做)出于同样的原因,我们从转换中删除了您的 TABLE,因为它是虚拟表语法的一部分,而不是您的类型定义的一部分。

因为 multiset 不允许空值,并且出于某种原因我们必须告诉 Informix 它自己的规则,我们需要在行定义中添加'not null'(所以没有空行,行内的值可以为空) 在多重集内。

事实上,多重集对文字和类型使用不同的括号,而行对两者都使用 (),这对我来说是完全无法解释的。

关于SQL Informix 12.10FC6 - 一次转换多列多列,但不创建用户定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62588490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com