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 过程中传递它