PL/SQL Oracle :- 在传递值时动态 UNPIVOT ORACLE TABLE

Posted

技术标签:

【中文标题】PL/SQL Oracle :- 在传递值时动态 UNPIVOT ORACLE TABLE【英文标题】:PL/SQL Oracle :- Dynamically UNPIVOT ORACLE TABLE on passing a value 【发布时间】:2019-10-23 11:20:10 【问题描述】:

我有一个如下表格,里面有数据:-

Item    COL1    COL2    COL3    COL4    COL5    COL6    ....    COL 30
A       1       1       2       3       4       2       5       2
B       2       6       4       3       5       2       5       1
C       3       4       5       2       2       2       4       2
D       4       5       2       23      45      3       3       3
F       5       3       1       11      23      34      34      1

并且需要根据我给出的值进行 UNPIVOT... 如果我给出 4,则表未透视到 COL4,如果我给出 7,则表未透视到 7,使其成为动态的。我编写了一个简单的 SQL,但无法使其动态化

   SELECT * FROM (
     WITH
      WIDE AS (
     SELECT
      /*+ PARALLEL(128) */
      ITEM, COL1,  COL2,  COL3,  COL4,  COL5,  COL6, COL7
     FROM TAB
     WHERE ITEM  = 'A'
    )
    SELECT
     /*+ PARALLEL(128) */
     ITEM
    FROM WIDE
   UNPIVOT INCLUDE NULLS
   (QTY FOR SCOL IN
    (COL1,  COL2,  COL3,  COL4, COL5,  COL6,
    COL7
    )
   )
  ); 

【问题讨论】:

【参考方案1】:

你为什么不unpivot所有可能的列然后用where子句限制数据集:

SELECT ITEM, SCOL, QTY 
  FROM WIDE
    UNPIVOT INCLUDE NULLS
      (QTY FOR SCOL IN (COL1, ..., COL 30))
 WHERE TO_NUMBER(SUBSTR(SCOL,4)) <= 7 -- 7 Should be replaced with your parameter

【讨论】:

以上是关于PL/SQL Oracle :- 在传递值时动态 UNPIVOT ORACLE TABLE的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中构造 oracle.sql.ANYDATA 并在 PL/SQL 过程中传递它

Oracle_PL/SQL 动态sql

oracle pl/sql 将异常类型传递给函数

将数据集从 Oracle PL/SQL 传递到 Java 的适当方法

在 Oracle APEX PL/SQL 中传递变量

Oracle:使用 SQL 或 PL/SQL 查找动态 SQL 中的错误位置