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

ORA-06553:PLS-801:kesalahan internal [55018] saat menguji fungsi mengembalikan ROWTYPE

Karena Anda hanya ingin menguji fungsi, Anda dapat menggunakan blok PL/SQL anonim untuk memanggilnya dan menetapkan hasilnya ke variabel tipe baris yang cocok, mis.:

declare
  l_row mytable%rowtype;
begin
  -- call the function and assign the result to a variable
  l_row := mypackage.myfunction(1, 2, 3);
  -- do something with the result
  dbms_output.put_line(l_row.some_columns);
end;
/

Demo cepat dengan tabel yang dibuat dan fungsi yang diperluas:

create table mytable (col1, col2, col3, col4, col5) as
select 1, 2, 3, 'test', sysdate from dual;

create or replace package mypackage as 
  function myfunction (param1 number, param2 number, param3 number)
  return mytable%rowtype;
end mypackage;
/

create or replace package body mypackage as 
  function myfunction (param1 number, param2 number, param3 number)
  return mytable%rowtype is
    l_row mytable%rowtype;
  begin
    select * into l_row
    from mytable
    where col1 = param1
    and col2 = param2
    and col3 = param3;

    return l_row;
  end myfunction;
end mypackage;
/

Memanggil dari SQL mendapatkan kesalahan yang sama seperti yang Anda lihat sekarang:

    select mypackage.myfunction(1, 2, 3) from dual;

    SQL Error: ORA-06553: PLS-801: internal error [55018]

Tetapi dengan blok (jalankan di sini melalui Pengembang SQL dengan output diaktifkan):

set serveroutput on

declare
  l_row mytable%rowtype;
begin
  -- call the function and assign the result to a variable
  l_row := mypackage.myfunction(1, 2, 3);
  -- do something with the result
  dbms_output.put_line(l_row.col4 ||':'|| l_row.col5);
end;
/

test:2019-04-29


PL/SQL procedure successfully completed.

db<>biola



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menemukan jumlah karakter dan angka dalam string

  2. Entri pencarian orang SQL memiliki anjing paling banyak

  3. Secara otomatis mengatur nilai awal urutan Oracle

  4. Oracle:Hapus dari bawah ke atas

  5. Untuk mengubah tipe data kolom dari clob ke xmltype