【发布时间】:2016-08-15 14:14:01
【问题描述】:
在 Oracle PL/SQL 中,我运行了一个查询并尝试逐一读取每一行的每一列,以便我可以将它们与分隔符连接在一起(硬格式要求)。该脚本用于多个不同大小的表,因此事先不知道列数。我用过
SELECT COUNT(column_name) INTO NumColumns FROM all_tabs_cols
WHERE table_name = Table_Array(i);
其中已经定义了 Table_Array。这是在 for 循环的中间,并且成功地让我获得了总列数。 Table_Cursor 是一个 SELECT * 语句。在此之后,我正在尝试做类似的事情
FOR j IN 0..NumColumns-1 LOOP
FETCH TABLE_CURSOR.column(j) INTO DataValue;
DBMS_OUTPUT.PUT(DataValue || '/');
END LOOP
以上是伪代码。它说明了我所追求的概念。我不太了解 PL/SQL,不知道如何从一行中获取这样的值。我也担心在执行此操作时意外推进光标。我怎样才能完成这项任务?
【问题讨论】:
-
谁不只使用 LISTAGG 或其他一些聚合函数?
-
这不是你应该使用 SQL 的方式——SQL 是基于设置的——一旦你看到你就有麻烦了。
-
@Hogan,我很害怕。那么有什么更好的方式来获取这些信息呢?
-
@OldProgrammer,LISTAGG 会很棒,因为我已经用它来获取标题信息。问题是它似乎只沿着列向下,而不是跨行。我有 1000 行 3 列,我需要 1/A1/B1/C1,然后是 2/A2/B2/C2 等。有没有办法让 LISTAGG 跨行工作?
-
@SandPiper - 最好的方法是编写一些代码来生成快速的代码并运行它。看我的回答——它只有一行。