Jac*_*cob 6 sql database informix
我需要在一列中选择硬编码值,因此我将能够将它们与 Informix DB 中的表连接起来。所以我尝试用不同的变体来做这样的事情:
select a from ( values (1), (2), (3) ) ;
Run Code Online (Sandbox Code Playgroud)
我希望得到结果:
1
2
3
Run Code Online (Sandbox Code Playgroud)
我认为在其他数据库中,我尝试过的这个或其他一些变体会返回这些值。但是,在 Informix 中它不起作用。
有人可以建议在 Informix 中工作的解决方案吗?
尽管Gordon Linoff 所 建议的肯定会奏效,但也有使用 Informix 特定语法的更紧凑的符号可用。
例如:
SELECT a
FROM TABLE(SET{1, 2, 3}) AS t(a)
Run Code Online (Sandbox Code Playgroud)
这将非常愉快地(并且简洁地)生成一个整数列表。您可以使用 LIST 或 MULTISET 代替 SET。与 SET 不同,MULTISET 可以有重复的元素;LIST 保留顺序并允许重复。
很多时候,您不会发现订单没有用简单的值保留——只是列表中的几个项目。不保证 SET 或 MULTISET 的顺序;如果顺序很重要,请使用 LIST。
您可以在 IBM Informix 12.10 手册中的Collection Constructors下找到相关信息。不,你怎么得到它并不明显-我开始SELECT,然后FROM,然后并从那里来“表达”“从集合变量选择”; 我花了几秒钟茫然地盯着那个,然后看了看“构造函数表达式”和“集合构造函数”。
小智 5
INSERT INTO cccmte_pp ( cmte, pref, nro, eje, id_tri, id_cuo, fecha, vto1, vto2, id_tit, id_suj, id_bie, id_gru )
SELECT *
FROM TABLE (MULTISET {
row('RC', 4, 10, 2020, 1, 5, MDY(05,20,2020), MDY(05,20,2020),MDY(05,27,2020),101, 1, 96, 1 ),
row('RC', 4, 11, 2020, 1, 5, MDY(05,20,2020), MDY(05,20,2020),MDY(05,27,2020),101, 1, 96, 1 )
})
AS t( cmte, pref, nro, eje, id_tri, id_cuo, fecha, vto1, vto2, id_tit, id_suj, id_bie, id_gru )
Run Code Online (Sandbox Code Playgroud)
是批量插入的简单解决方案,选择部分解决其余问题!非常简单!:) 享受
Informix 需要一个实际的查询语句。我认为这会起作用:
select a
from (select 1 as a from systables where tabid = 1 union all
select 2 as a from systables where tabid = 1 union all
select 3 as a from systables where tabid = 1
) t;
Run Code Online (Sandbox Code Playgroud)