【发布时间】:2016-11-30 20:30:58
【问题描述】:
我想要一个 Oracle sql 查询,它在运行时从特定 TABLE 中获取所有 COLUMN_NAMES,然后使用这些 COLUMN_NAMES 从每个 ROW 中获取值,考虑到我不知道 TABLE 中 COLUMNS 的数量和名称。
表 1:
COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4
value11 value12 value13 value14
value21 value22 value23 value24
...
作为 sql 查询的结果,我期望插入语句对应于每一行,如下所示:
INSERT INTO TABLE1 VALUES (value11,value12,value13,value14);
INSERT INTO TABLE1 VALUES (value21,value22,value23,value24);
...
我目前的做法如下:
查询 1
SELECT 'INSERT INTO TABLE1 VALUES (' ||COLUMN_1 ||',' ||COLUMN_2 ||',' ||COLUMN_3 ||',' ||COLUMN_4 ||');' AS INSERTSCRIPT FROM TABLE1 ORDER BY COLUMN_1;
使用它我得到了所需的插入语句,但问题是“我想避免为每个 TABLE 手动指定列名(因为有超过数百个这样的 TABLES)”。
所以我一直在尝试下一步:
查询 2)
SELECT LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) FROM USER_TAB_COLS WHERE TABLE_NAME = 'TABLE1';
将列列为COLUMN_1, COLUMN_2, COLUMN_3, COLUMN_4 但问题是我无法在QUERY_1 中使用此结果
提前致谢!
【问题讨论】: