Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ORA-06553:PLS-801:आंतरिक त्रुटि [55018] जब परीक्षण फ़ंक्शन ROWTYPE लौटा रहा हो

जैसा कि आप केवल फ़ंक्शन का परीक्षण करना चाहते हैं, आप इसे कॉल करने के लिए एक अनाम पीएल/एसक्यूएल ब्लॉक का उपयोग कर सकते हैं और इसके परिणाम को एक मिलान पंक्ति प्रकार चर के लिए असाइन कर सकते हैं, जैसे:

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

एक निर्मित तालिका और विस्तारित फ़ंक्शन के साथ त्वरित डेमो:

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

SQL से कॉल करने पर वही त्रुटि मिलती है जो आप अभी देखते हैं:

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

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

लेकिन एक ब्लॉक के साथ (आउटपुट सक्षम के साथ SQL डेवलपर के माध्यम से यहां चलाएं):

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. Oracle क्वेरी में सशर्त रूप से कॉलम का चयन कैसे करें

  2. Oracle में NULLIF () फ़ंक्शन

  3. ओरेकल सिड और डेटाबेस नाम की जाँच करना

  4. SQLFiddle में पीएल/एसक्यूएल कैसे प्राप्त करें?

  5. जावा से पीएल/एसक्यूएल में सरणी कैसे वापस करें?