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

ORA-06553:PLS-801:błąd wewnętrzny [55018] podczas testowania funkcji zwracającej ROWTYPE

Ponieważ chcesz tylko przetestować funkcję, możesz użyć anonimowego bloku PL/SQL, aby ją wywołać i przypisać jej wynik do pasującej zmiennej typu rowtype, np.:

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;
/

Szybkie demo ze zmyśloną tabelą i rozszerzoną funkcją:

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;
/

Wywołanie z SQL powoduje ten sam błąd, który widzisz teraz:

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

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

Ale z blokiem (przeprowadź tutaj przez SQL Developer z włączonym wyjściem):

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<>skrzypce



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IOException:Karta sieciowa nie może nawiązać połączenia

  2. jak sprawdzić, czy baza danych jest spójna po niepełnym odzyskaniu

  3. Oracle przestawiaj wiersze na kolumny

  4. Jak mogę stworzyć stół z wyrocznią, ale z małymi postaciami?

  5. ORA-06502:PL/SQL:błąd liczbowy lub wartości:zbyt mały bufor ciągu znaków