मैं एक प्रकार MyType इस प्रकार परिभाषित किया गया है:Oracle SQL: उपयोगकर्ता परिभाषित प्रकार रिटर्न के साथ अंतराल समारोह का उपयोग कर "असंगत डेटाटाइप्स"
create or replace type MyType as varray(20000) of number(18);
और एक मेज MyTable के रूप में परिभाषित इस प्रकार है:
create table MyTable (
id number(18) primary key
,widgets MyType
)
मैं निम्नलिखित एसक्यूएल का उपयोग कर MyTable में प्रत्येक पंक्ति के लिए विजेट और इसकी तार्किक पिछली पंक्ति का चयन करने के कोशिश कर रहा हूँ:
select t.id
,lag(t.widgets,1) over (order by t.id) as widgets_previous
from MyTable t
order by t.id;
ORA-00932: inconsistent datatypes: expected - got MYSCHEMA.MYTYPE
अगर मैं MyType के बजाय ठीक उसी क्वेरी प्रकार varchar या संख्या का एक स्तंभ का उपयोग चलाने यह ठीक काम करता है:और मैं प्रतिक्रिया मिल।
वर्तमान पंक्ति में स्तंभ और इसकी पिछली पंक्ति के प्रकार के समान होना चाहिए तो मैं केवल यह उपयोगकर्ता परिभाषित प्रकार से संबंधित कुछ है मान सकते हैं।
मैं कुछ खास एक उपयोगकर्ता परिभाषित प्रकार के साथ अंतराल उपयोग करने के लिए क्या करने की जरूरत है, या अंतराल उपयोगकर्ता परिभाषित प्रकार का समर्थन नहीं करता? यदि उत्तरार्द्ध, क्या कोई अन्य उपयोगिता कार्य है जो समान कार्यक्षमता प्रदान करेगा या क्या मुझे इसे प्राप्त करने के लिए पारंपरिक स्वयं को शामिल करने की आवश्यकता है?
मैं इस अपने आप को अभी परीक्षण नहीं कर सकते, दुर्भाग्य से, लेकिन क्या होता है अगर आप कार्य करें: 'अंतराल (t.widgets, 1, डाली (MyType के रूप में नल)) ओवर (टी.आईडी द्वारा आदेश) '? – Boneist
@ बोनिस्ट - मुझे डर है कि मुझे अभी भी ओआरए -00 9 32-थैंक्स मिलते हैं, एक अच्छा विचार! – Pancho
नेस्टेड टेबल का उपयोग करने का एक विकल्प स्पष्ट रूप से एक टेबल बनाना होगा और उसमें अपना डेटा स्टोर करना होगा, और उसके बाद नई तालिका से एक फ़िकी को mytable पर वापस लेना होगा (और फिर डेटासेट की तुलना करने के लिए SQL का उपयोग करें)। अन्यथा, यह स्वयं शामिल करने का सबसे आसान तरीका है (यानी पिछली पंक्ति की आईडी पाएं और वर्तमान आईडी में शामिल हों) – Boneist