आपकी परीक्षण प्रक्रिया में आपके पास v
. है एक आउट पैरामीटर के रूप में घोषित - इसका मतलब है कि प्रक्रिया को प्रक्रिया में आउटपुट संग्रह को प्रारंभ करने की आवश्यकता है (उदाहरण के लिए v := T();
) भले ही आप u_t
. को इनिशियलाइज़ करने के लिए कॉलिंग ब्लॉक को बदल दें यह मदद नहीं करेगा, क्योंकि u_t
संग्रह प्रक्रिया में पारित नहीं किया जाता है - यह केवल वही प्राप्त करता है जो प्रक्रिया वापस चली जाती है।
अपना कोड इस प्रकार बदलें:
CREATE OR REPLACE PROCEDURE TEST ( u IN T, v OUT T) IS
i NUMBER := u.FIRST;
BEGIN
v := T();
v.EXTEND(u.COUNT);
IF i IS NOT NULL THEN
LOOP
v(i) := u(i);
i := u.NEXT(i);
EXIT WHEN i IS NULL;
END LOOP;
END IF;
END TEST;
DECLARE
v_t T;
u_t T;
BEGIN
v_t := T();
v_t.EXTEND(2);
v_t(1) := 'This is test1';
v_t(2) := 'This is test2';
TEST(v_t, u_t);
FOR i IN u_t.FIRST..u_t.LAST LOOP
DBMS_OUTPUT.PUT_LINE(u_t(i));
END LOOP;
END;
कृपया ध्यान दें कि PL/SQL में स्ट्रिंग स्थिरांक एकल-उद्धरणों में संलग्न होने चाहिए, न कि दोहरे उद्धरणों में।
इसके अलावा - समान चर नामों का उपयोग करना जो प्रक्रिया में विपरीत अर्थ रखते हैं और कॉलिंग ब्लॉक केवल भ्रम को जोड़ता है। सार्थक नामों का उपयोग करने की आदत डालें और आप बाद में अपने आप को बहुत भ्रम से बचा लेंगे।
साझा करें और आनंद लें।