【问题标题】:Build table in WITH clause from csv [closed]从 csv 在 WITH 子句中构建表 [关闭]
【发布时间】:2013-07-30 04:32:55
【问题描述】:

我有一个从表中转储的 csv 文件。
现在我想使用该 csv 文件中的 WITH 构建表。
我曾尝试获取每列的所有值,在单独的变量中用逗号分隔,然后通过在 WITH 中进行联合来插入,但这是不可能的。
是否可以通过在没有循环的情况下使用逗号分隔值插入表中?
让我们说
$roll_no = "1,2,3,4,5"
$name = "name1,name2,name3,name4,name5"
roll_no 名称
---------------
1 个名字1
2 名称2
3 名称3
4 名称4
5 名称5
还有其他方法吗? 谢谢

【问题讨论】:

  • 通过转储到表中的 csv 文件是否意味着它被许多内置和用户可构建的过程之一正确放置在表中,这意味着 csv 文件中的每一列都是单独的列甲骨文?听起来您不是那个意思,在这种情况下,请先阅读有关 SQL*Loader 和外部表的信息,然后再继续。
  • 或者您的意思是您已经提取了 csv 文件并尝试使用它进行 SQL 查询?
  • @Ben 是的,我已经像
    一样转储到 csv
  • @Ben 是的,我已经将表格转储到 csv 中,例如 1,name1 2,name2 3,name3 .. 通过执行 select col1 || ',' || col2 来自表;现在我想在 WITH 中构建表,因为我不想创建任何物理表。
  • 请查看类似问题的答案:stackoverflow.com/a/11721051/146325

标签: sql oracle csv plsql subquery-factoring


【解决方案1】:

可以像下面给出的那样传递逗号分隔的字符串。这会将整个逗号分隔的字符串转换为不同的行。

 SELECT trim(x.column_value.extract('e/text()')) COLUMNS from t t, table    
(xmlsequence(xmltype('<e><e>' || replace(valuestring,--put comma seperated string here
':','</e><e>')||  
 '</e></e>').extract('e/e'))) x   );

【讨论】:

  • 谢谢...这正是我想要的。
猜你喜欢
  • 2020-11-23
  • 2016-12-13
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多