Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-00932:niespójne typy danych:oczekiwano - mam -

Sposób, w jaki używasz KURSORA REF jest rzadkością. Byłby to standardowy sposób ich używania:

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

Nie jestem pewien, co próbujesz tutaj osiągnąć, pobierasz kursor ref wewnątrz procedury, a następnie zwracasz inny kursor ref, który będzie miał te same dane. Wydaje mi się, że w tej procedurze nie jest konieczne pobieranie kursora. Pozwól aplikacji wywołującej wykonać pobieranie (tutaj pobieranie odbywa się przez print ).

Aktualizacja:dlaczego otrzymujesz nieprzydatny komunikat o błędzie?

Używasz kursora otwieranego dynamicznie i myślę, że jest to jeden z powodów, dla których otrzymujesz nieprzydatny komunikat o błędzie. Jeśli używamy stałego SQL, komunikat o błędzie jest inny:

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

Nakreśliłem, że obecnie w wersji 10.2 możesz pobrać kursor do rekordu PLSQL, ale nie w obiekcie SQL.

Aktualizacja:dotycząca PLS-00306 :zła liczba lub typy argumentów

l_rarray jest TABELĄ ZAgnieżdżoną, należy ją zainicjować, a następnie rozszerzyć, aby móc przechowywać elementy. Na przykład:

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

Więcej informacji można znaleźć w dokumentacji Kolekcje i rekordy 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. Jaki wpływ na wydajność ma klauzula Oracle IN bez złączeń?

  2. ALTER SESSION SET nls_date_format nie działa w APEX. Działa jednak w SQL Developer

  3. Czy możesz używać Microsoft Entity Framework z Oracle?

  4. Dlaczego to sprawdzenie pod kątem pustej tablicy asocjacyjnej w PL/SQL kończy się niepowodzeniem?

  5. Funkcje ciągów Oracle (pełna lista)