Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-06553:PLS-801:lỗi nội bộ [55018] khi kiểm tra chức năng trả về ROWTYPE

Vì bạn chỉ muốn kiểm tra hàm, bạn có thể sử dụng một khối PL / SQL ẩn danh để gọi nó và gán kết quả của nó cho một biến kiểu hàng phù hợp, ví dụ:

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

Bản demo nhanh với một bảng được tạo sẵn và chức năng mở rộng:

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

Gọi từ SQL gặp lỗi tương tự như bạn thấy bây giờ:

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

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

Nhưng với một khối (chạy ở đây thông qua Nhà phát triển SQL với đầu ra được bật):

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thiết kế cơ sở dữ liệu cho cài đặt thông báo

  2. Kết quả không mong muốn của ánh xạ nhiều tập trong Oracle SQL

  3. Thủ tục được lưu trữ với nhiều tham số IN

  4. java.sql.SQLException:ORA-01002:tìm nạp ngoài trình tự

  5. System.Data.OracleClient yêu cầu phần mềm máy khách Oracle phiên bản 8.1.7 trở lên