Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-00932:tipe data tidak konsisten:diharapkan - didapat -

Cara Anda menggunakan KURSOR REF jarang terjadi. Ini akan menjadi cara standar untuk menggunakannya:

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).

Saya tidak yakin apa yang ingin Anda capai di sini, Anda mengambil kursor ref di dalam prosedur dan kemudian mengembalikan kursor ref lain yang akan memiliki data yang sama. Saya rasa tidak perlu mengambil kursor sama sekali dalam prosedur. Biarkan aplikasi pemanggil melakukan pengambilan (di sini pengambilan dilakukan dengan print ).

Pembaruan:mengapa Anda mendapatkan pesan kesalahan yang tidak membantu?

Anda menggunakan kursor yang dibuka secara dinamis dan saya pikir itu adalah bagian dari alasan Anda mendapatkan pesan kesalahan yang tidak membantu. Jika kita menggunakan SQL tetap, pesan kesalahannya berbeda:

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

Saya menjelaskan bahwa saat ini di 10.2 Anda dapat mengambil kursor ke dalam catatan PLSQL tetapi tidak dalam Objek SQL.

Pembaruan:mengenai PLS-00306 :jumlah atau jenis argumen yang salah

l_rarray adalah NESTED TABLE, perlu diinisialisasi dan kemudian diperluas untuk dapat menyimpan elemen. Misalnya:

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).

Untuk bacaan lebih lanjut, Anda dapat menelusuri dokumentasi untuk Koleksi dan catatan 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. Apakah ada Masalah dengan Entitas JPA, Oracle 10g, dan properti Jenis Kalender?

  2. Bagaimana memulihkan atau mengubah kata sandi sysdba Oracle

  3. GWFG di Oracle RAC

  4. EF6 Oracle TimeStamp &Tanggal

  5. Bagaimana cara menghapus pemicu di Oracle yang berisi karakter khusus?