Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ORA-00932:असंगत डेटाटाइप:अपेक्षित - मिला -

जिस तरह से आप आरईएफ कर्सर का उपयोग कर रहे हैं वह असामान्य है। यह उनका उपयोग करने का मानक तरीका होगा:

SQL> CREATE OR REPLACE PACKAGE BODY MYPACK_PKG AS
  2     PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR) AS
  3     BEGIN
  4        OPEN r_cursor FOR SELECT e.empno,e.ENAME,null  FROM scott.emp e;
  5     END MY_PROC;
  6  END MYPACK_PKG;
  7  /

Corps de package crÚÚ.

SQL> VARIABLE r REFCURSOR
SQL> BEGIN
  2     MYPACK_PKG.MY_PROC(:r);
  3  END;
  4  /

ProcÚdure PL/SQL terminÚe avec succÞs.

SQL> PRINT :r

     EMPNO ENAME      N
---------- ---------- -
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      [...]

14 ligne(s) sÚlectionnÚe(s).

मुझे यकीन नहीं है कि आप यहां क्या हासिल करने की कोशिश कर रहे हैं, आप प्रक्रिया के अंदर रेफ कर्सर ला रहे हैं और फिर एक और रेफ कर्सर लौटा रहे हैं जिसमें समान डेटा होगा। मुझे नहीं लगता कि प्रक्रिया में कर्सर लाना बिल्कुल भी आवश्यक है। कॉलिंग ऐप को फ़ेचिंग करने दें (यहाँ फ़ेचिंग print द्वारा किया जाता है )।

अपडेट:आपको अनुपयोगी त्रुटि संदेश क्यों मिल रहा है?

आप गतिशील रूप से खोले गए कर्सर का उपयोग कर रहे हैं और मुझे लगता है कि यह कारण है कि आपको अनुपयोगी त्रुटि संदेश मिल रहा है। यदि हम निश्चित SQL का उपयोग करते हैं तो त्रुटि संदेश अलग है:

SQL> CREATE OR REPLACE PACKAGE BODY MYPACK_PKG AS
  2     PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR) AS
  3        TYPE type_rec IS RECORD (qn number,
  4                                 firstname VARCHAR2(30),
  5                                 lastname VARCHAR2(30));
  6        lt_record type_rec; /* Record type */
  7        lt_object r_type; /* SQL Object type */
  8     BEGIN
  9        OPEN r_cursor FOR SELECT e.empno,e.ENAME,null  FROM scott.emp e;
 10        FETCH r_cursor INTO lt_record; /* This will work */
 11        FETCH r_cursor INTO lt_object; /* This won't work in 10.2 */
 12     END MY_PROC;
 13  END MYPACK_PKG;
 14  /

Package body created

SQL> VARIABLE r REFCURSOR
SQL> BEGIN
  2     MYPACK_PKG.MY_PROC(:r);
  3  END;
  4  /
BEGIN
*
ERREUR Ó la ligne 1 :
ORA-06504: PL/SQL: Return types of Result Set variables or query do not match
ORA-06512: at "APPS.MYPACK_PKG", line 11
ORA-06512: at line 2

मैंने रेखांकित किया है कि वर्तमान में 10.2 में आप एक कर्सर को PLSQL रिकॉर्ड में ला सकते हैं लेकिन नहीं SQL ऑब्जेक्ट में।

अपडेट:PLS-00306 के बारे में :गलत संख्या या तर्कों के प्रकार

l_rarray एक नेस्टेड टेबल है, इसे इनिशियलाइज़ करने और फिर तत्वों को स्टोर करने में सक्षम होने के लिए विस्तारित करने की आवश्यकता है। उदाहरण के लिए:

SQL> CREATE OR REPLACE PACKAGE BODY MYPACK_PKG AS
  2     PROCEDURE MY_PROC(r_cursor OUT MY_REF_CURSOR) AS
  3        lr_array tr_type := tr_type(); /* SQL Array */
  4     BEGIN
  5        FOR cc IN (SELECT e.empno, e.ENAME, NULL lastname
  6                     FROM scott.emp e) LOOP
  7           lr_array.extend;
  8           lr_array(lr_array.count) := r_type(cc.empno,
  9                                              cc.ename,
 10                                              cc.lastname);
 11           /* Here you can do additional procedural work on lr_array */
 12        END LOOP;
 13        /* then return the result set */
 14        OPEN r_cursor FOR SELECT * FROM TABLE (lr_array);
 15     END MY_PROC;
 16  END MYPACK_PKG;
 17  /

Corps de package crÚÚ.

SQL> print r

       SQN FIRSTNAME                      LASTNAME
---------- ------------------------------ -----------
      7369 SMITH                          
      7499 ALLEN                          
      7521 WARD                           
      [...]

14 ligne(s) sÚlectionnÚe(s).

आगे पढ़ने के लिए आप के दस्तावेज़ ब्राउज़ कर सकते हैं। PL/SQL संग्रह और रिकॉर्ड .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle क्लाइंट के बिना Python Oracle DB कनेक्ट

  2. Oracle एपेक्स 5 - ऐप बिल्डर की तरह फुटर बार

  3. NLS_CHARSET_NAME () Oracle में फ़ंक्शन

  4. COSH() Oracle में फंक्शन

  5. Oracle के लिए घुंघराले ब्रेस एस्केपिंग का उपयोग कैसे करें