我正在使用Oracle對象數據類型來表示時間跨度或時間段。而且我必須完成一系列涉及處理期間集合的操作。在SQL中迭代集合比在PL/SQL中快得多。迭代Oracle對象的集合並將其展開
CREATE TYPE PERIOD AS OBJECT (
beginning DATE,
ending DATE,
... some member functions...);
CREATE TYPE PERIOD_TABLE AS TABLE OF PERIOD;
-- what I would like to do: where t.column_value is still a period type
SELECT (t.column_value).range_intersect(period2)
FROM TABLE(period_table1) t
WHERE pa_contains(period_table1, (t.column_value).prev()) = 0
AND pa_contains(period_table1, (t.column_value).next()) = 1
的問題是,該表()函數爆炸的對象爲標量值,我真的很需要的對象,而不是。我可以使用標量值重新創建對象,但這會導致重新實例化對象的開銷。這段時間被設計爲小類,所以在試圖找出將其初始化時會有額外的困難。
有沒有另外一種方法可以在SQL中做到這一點,不會破壞我的對象?
請給我們一個你的代碼的工作示例。 'CONTAINS()'是一個成員函數嗎? MAP函數()?您提出問題越完整,您就越有可能獲得有用的答案。 – APC 2010-03-27 07:33:59
由於與問題正交,我沒有詳細討論週期或週期表。在規範和正文之間有很多代碼和發佈,這將是確保人們的眼睛黯然失色的最可靠的方法。 – 2010-03-28 04:55:47