Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将所有列提取到一列oracle中_Sql_Oracle - Fatal编程技术网

Sql 将所有列提取到一列oracle中

Sql 将所有列提取到一列oracle中,sql,oracle,Sql,Oracle,如何将所有列提取到一列中 我有下面的示例查询 WITH da AS( SELECT 'a' col1, 'b' col2, 'c' col3 FROM dual UNION ALL SELECT '1' col1, '2' col1, '3' col1 FROM dual UNION ALL SELECT 'x' col1, 'y' col1, 'z' col1 FROM dual ) SELECT * FROM da; //RESULTS COL1|COL2|COL3| ----|---

如何将所有列提取到一列中

我有下面的示例查询

WITH da AS( 
SELECT 'a' col1, 'b' col2, 'c' col3 FROM dual UNION ALL
SELECT '1' col1, '2' col1, '3' col1 FROM dual UNION ALL
SELECT 'x' col1, 'y' col1, 'z' col1 FROM dual
)
SELECT * FROM da;

//RESULTS

COL1|COL2|COL3|
----|----|----|
a   |b   |c   |
1   |2   |3   |
x   |y   |z   |
但我想要的结果如下所示,以|作为分隔符

ONE_COL|
-------|
a|b|c  |
1|2|3  |
x|y|z  |

我最大的问题是我不知道列名,因此我不能这样做:

SELECT  col1||'|'||col2||'|'||col3 AS ONE_COL  FROM da;

我怎样才能做到这一点

Concat with子句中的双列,这样您就不需要知道da列的名称

WITH da AS( 
SELECT 'a' || '|' || 'b' || '|' || 'c' AS one_col FROM dual UNION ALL
SELECT '1' || '|' || '2' || '|' || '3' AS one_col FROM dual UNION ALL
SELECT 'x' || '|' || 'y' || '|' || 'z' AS one_col FROM dual
)
SELECT * FROM da;

数据库知道列名。因此,请使用dbms_sql包并解析您的sql


有很多解决方案可以在事后提取数据,因此我不明白您为什么认为自己不知道任何列名。以下只是为了演示一种实现您要求的方法。假设我没有误解你的要求

首先是一些准备工作

根据问题中的示例数据创建DA表。 创建表DA COL1 char1、COL2 char1、COL3 char1; 根据问题中的示例数据,再次向表中添加行。 在DA值中插入'a'、'b'、'c'; 插入DA值“1”、“2”、“3”; 插入DA值“x”、“y”、“z”; 我知道您希望将表DA中的数据插入另一个表,因此根据我从您的问题中了解的内容,我创建了第二个数据库表。 创建表格结果一列字符5; PL/SQL代码,该代码检索列的名称,假设您知道数据字典中的表名,然后创建一个动态游标,再次以问题中描述的格式从该表中检索值,并将动态游标获取的行插入到第二个数据库表中,因为这是我从问题中了解到的您的需求。 声明 L_COL varchar2128; L_CUR sys_refcursor; 一分五; L_SQL varchar22000; - 光标C_COLS为 选择列名称 从用户选项卡列 其中表_NAME='DA'; 开始 L_SQL:=“选择”; 打开C_COLS; 把C_COLS拿到L_COL; L_SQL:=L_SQL | L|COL; 而C_COLS%已找到 环 把C_COLS拿到L_COL; 如果找到C_COLS%,则 L_SQL:=L_SQL | |'| |'; L_SQL:=L_SQL | | |'| |'; L_SQL:=L_SQL | L|COL; 如果结束; 端环; 关闭C_COLS; L_SQL:=L_SQL | | |‘来自DA’; 为L_SQL打开L_CUR; 环 把L_CUR放入L_ONE; 未找到L_CUR%时退出; 插入结果值L_ONE; 端环; 关闭L_CUR; 终止 最后,在运行上述PL/SQL代码之后。。。 从结果中选择*; 返回

ONE_C
-----
abc
123
xyz

您不知道要选择的列的名称?@Joannaraganau是的,我不知道列的名称。您想在SQL Developer这样的客户端上以交互方式运行吗?或者您需要其他程序调用的过程解决方案吗?@APC欢迎任何解决方案。我们忘记了传递给数据库,但我们可以传递查询给数据库,以返回结果,从而将结果插入到另一个数据库/表中。您可以从信息模式生成一些动态SQL,但整个情况似乎很奇怪。从不知道列的表中选择数据的目的是什么?如果你不知道它是什么,它怎么会有用呢?也许看看SSI什么的?我不知道列名什么表你不知道'da'或'dual'的列吗?我假设在您的实际用例中,“dual”是一个实际的表,而不是dual。我将其用作示例数据。我盲目地发送查询,在插入另一个表时返回数据。因此我不知道列名。然后,我必须首先编写一个查询,该查询发送到db,并将列名称作为一列返回给我。因为我没有使用编辑器。我使用的工具必须指定一列来插入结果,它不是sql编辑器。i、 e.我发送它在将结果插入另一个表时返回的查询返回的查询包含列名。因此,您的问题是,使用工具x,您不知道如何反向生成查询?工具x具有该限制。由于是共享的,您必须在问题中提供有关系统设置的更多信息。否则就不可能提供好的解决方案。