BULK COLLECT
कथन का उपयोग करने का प्रयास करते समय मुझे त्रुटि ORA-00947: not enough values
मिली।बल्क ऑब्जेक्ट्स की एक तालिका में एकत्र करें
एक उदाहरण स्क्रिप्ट:
CREATE OR REPLACE
TYPE company_t AS OBJECT (
Company VARCHAR2(30),
ClientCnt INTEGER );
/
CREATE OR REPLACE
TYPE company_set AS TABLE OF company_t;
/
CREATE OR REPLACE
FUNCTION piped_set (
v_DateBegin IN DATE,
v_DateEnd IN DATE
)
return NUMBER /*company_set pipelined*/ as
v_buf company_t := company_t(NULL, NULL);
atReport company_set;
sql_stmt VARCHAR2(500) := '';
begin
select * BULK COLLECT INTO atReport
from (
SELECT 'Descr1', 1 from dual
UNION
SELECT 'Descr2', 2 from dual) ;
return 1;
end;
त्रुटि लाइन select * BULK COLLECT INTO atReport
पर होता है।
सीधे पीएल/एसक्यूएल ठीक से काम करता है (इसलिए इसे समाधान के रूप में उल्लेख करने की आवश्यकता नहीं है)। उपयोगकर्ता तालिका प्रकार में BULK COLLECT
का उपयोग प्रश्न है।
धन्यवाद, @Alex, कोड वास्तव में मदद की! इस मुद्दे की निरंतरता के रूप में, क्या पाइपलाइन फ़ंक्शन परिणाम के रूप में थोक सम्मिलन के परिणाम को पार करना संभव है? वर्तमान में, मुझे परिणाम रिपोर्ट में प्राप्त होता है फिर "फॉर .. लूप (पाइप_रो (atReportRow) निष्पादित करें) अंत लूप;"। शायद यह हिस्सा भी सरलीकृत हो सकता है? – xacinay
@xacinay - 'थोक संग्रह 'के साथ नहीं; आप इसे कर्सर लूप के रूप में कर सकते हैं ('रिक में (कंपनी_टी() को COMP के रूप में चुनें ...) लूप पाइप पंक्ति rec.comp; एंड लूप;' या इसी तरह। मुझे लगता है कि प्रदर्शन समान होगा। आपको शायद एक नया प्रश्न पूछें यदि आप इसे आज़माते हैं और इसे काम नहीं कर सकते हैं। –
यह वही तरीका है जो यह काम करता है: 'x में (select ..) पाइप पंक्ति (company_t (x.Company, x.ClientCnt)) के लिए। मैंने बस सोचा, यह भी आसान हो सकता है। वैसे भी, वर्तमान परिणाम बहुत बढ़िया है, धन्यवाद! – xacinay