शायद डेटाबेस में नेस्टेड टेबल से बचने का सबसे अच्छा कारण यह है कि उन्हें काम करना मुश्किल होता है, और सिंटैक्स अंडर डॉक्यूमेंट किया जाता है और ग्रोक करने में मुश्किल होती है।
आगे बढ़ना!
यहां एक नेस्टेड टेबल वाला एक टेबल है।
SQL> select f.force_name, t.id, t.name
2 from transformer_forces f, table(f.force_members) t
3/
FORCE_NAME ID NAME
---------- ---------- --------------------
Autobot 0 Metroplex
Autobot 0 Optimus Prime
Autobot 0 Rodimus
Decepticon 0 Galvatron
Decepticon 0 Megatron
Decepticon 0 Starscream
Dinobot 0 Grimlock
Dinobot 0 Swoop
Dinobot 0 Snarl
9 rows selected.
SQL>
जैसा कि आप देख सकते हैं, नेस्टेड तालिका में प्रत्येक तत्व आईडी मामलों को सभी मामलों में शून्य पर सेट किया गया है। हम क्या करना चाहते हैं उन सभी को अद्यतन करें। लेकिन अफसोस!
SQL> update table
2 (select force_members from transformer_forces
3 where force_name = 'Autobot') t
4 set t.id = rownum
5/
3 rows updated.
SQL>
लेकिन करने का एक ही रास्ता है कि पूरे तालिका के लिए एक है:
SQL> update table
2 (select force_members from transformer_forces) t
3 set t.id = rownum
4/
(select force_members from transformer_forces) t
*
ERROR at line 2:
ORA-01427: single-row subquery returns more than one row
SQL>
यह होल्डिंग तालिका में एक ही पंक्ति के लिए एक नेस्टेड मेज पर सभी तत्वों को अद्यतन करने के लिए संभव है पीएल/एसक्यूएल पाश। नीरस
एक विकल्प है: use a Nested Table Locator, NESTED_TABLE_GET_REFS संकेत के माध्यम से। यह एक विशेष रूप से अस्पष्ट बात है (यह main list of hints में नहीं है), लेकिन यह काम कर देता है:
SQL> update /*+ NESTED_TABLE_GET_REFS */ force_members_nt
2 set id = rownum
3/
9 rows updated.
SQL> select f.force_name, t.id, t.name
2 from transformer_forces f, table(f.force_members) t
3/
FORCE_NAME ID NAME
---------- ---------- --------------------
Autobot 1 Metroplex
Autobot 2 Optimus Prime
Autobot 3 Rodimus
Decepticon 4 Galvatron
Decepticon 5 Megatron
Decepticon 6 Starscream
Dinobot 7 Grimlock
Dinobot 8 Swoop
Dinobot 9 Snarl
9 rows selected.
SQL>
यह संकेत हमें होल्डिंग तालिका पूरी तरह बाईपास और वास्तविक नेस्टेड तालिका के साथ काम करने के लिए अनुमति देता है। यही है, नेस्टेड टेबल स्टोरेज क्लॉज में निर्दिष्ट ऑब्जेक्ट:
create table transformer_forces (
force_name varchar2(10)
, force_members transformers_nt)
nested table force_members store as force_members_nt return as value;
^^^^^^^^^^^^^^^^
वाह, धन्यवाद! क्या एक बहुत अच्छी तरह से rundown, मुझे आशा है कि यह दूसरों को एक ही समस्या के साथ मदद करता है। मैंने नेस्टेड टेबल के साथ कुछ मामलों में अधिक सहज होने के लिए काम किया है (विशेष रूप से जब ऑब्जेक्ट उन्मुख जावा एप्लिकेशन से आ रहा है), लेकिन दूसरों में थोड़ा बोझिल- – chrismarx