Select Informix DB 中的硬编码值

Select hardcoded values in Informix DB

我需要在一列中 select 硬编码值,这样我就可以在 Informix DB 中将它们与 table 连接起来。所以我尝试了不同的变体来做这样的事情:

select a from ( values (1), (2), (3) ) ;

我希望得到结果:

1
2
3

我认为在其他数据库中,这个或我尝试过的其他一些变体会 return 值。但是,在 Informix 中它不起作用。

有人可以推荐在 Informix 中工作的解决方案吗?

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;

尽管 Gordon Linoff 肯定会起作用,但也有使用 Informix 特定语法的更紧凑的符号可用。

例如:

SELECT a
  FROM TABLE(SET{1, 2, 3}) AS t(a)

这将非常愉快地(并且简洁地)生成一个整数列表。您可以使用 LIST 或 MULTISET 代替 SET。与 SET 不同,MULTISET 可以有重复的元素; LIST 保留顺序并允许重复。

很多时候,您不会发现没有使用简单值保留顺序 — 只是列表中的几个项目。不保证 SET 或 MULTISET 的顺序;如果顺序很重要,请使用 LIST。

您可以在 Collection Constructors 下的 IBM Informix 12.10 手册中找到相关信息。不,你是如何做到这一点的并不明显——我从 SELECT 开始,然后是 FROM,然后是 'Selecting from a collection variable',然后是 'Expression';我愣了几秒钟,然后看着 'Constructor expressions' 然后 'Collection Constructors'.

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 )

是批量插入的简单解决方案,SELECT 部分解决其余问题! 非常简单! :) 尽情享受吧