下面是使用解析函數沿着table
函數,以產生所需的數據集,而無需使用存儲的過程的例子。
CREATE OR REPLACE TYPE number_list AS VARRAY(10) OF NUMBER
/
CREATE TABLE my_table(id NUMBER, coordinates number_list)
/
INSERT INTO my_table(id, coordinates)
VALUES (1, number_list(4,5,6,7,8,9));
INSERT INTO my_table(id, coordinates)
VALUES (2, number_list(10,11,12,13,14,15));
SELECT id,
coordinateset,
SUM(CASE suborder WHEN 1 THEN coordinate ELSE NULL END) AS x,
SUM(CASE suborder WHEN 2 THEN coordinate ELSE NULL END) AS y
FROM (SELECT id,
coordinate,
DENSE_RANK() OVER (PARTITION BY id ORDER BY CEIL(roworder/2)) AS coordinateset,
DENSE_RANK() OVER (PARTITION BY id, CEIL(roworder/2) ORDER BY roworder) AS suborder
FROM (SELECT a.id, b.COLUMN_VALUE AS coordinate, ROWNUM AS roworder
FROM my_table a, table(coordinates) b))
GROUP BY id, coordinateset
ORDER BY id, coordinateset;
使用ROWNUM
是我唯一不確定的東西。雖然在受控環境下,它似乎總是使用varray
指示的順序,但我不確定此行爲是否得到保證。
最後,爲了說明這一點,這是一個非常糟糕的設計。即使您使用將數據拆分爲兩個表格的適當關係設計來解決問題,您仍然可以使用用戶定義類型的varray
,它們專門指示哪些x和y值屬於一起。
是每個實行已知/常量「創建」的行數? – Yahia 2011-12-18 07:52:31
No.我更新了這個問題,所以要說 – Brad 2011-12-18 15:40:59
你需要顯示錶格的定義和VARARRAY ... – Yahia 2011-12-18 15:45:32