プロシージャの型データを oracle で作成します。
手順:
create or replace TYPE ROW_USER as object
(
ID NUMBER(4),
ROLES_ID NUMBER(1),
FIRST_NAME VARCHAR2(60 BYTE),
SECOND_NAME VARCHAR2(60 BYTE),
FIRST_LAST_NAME VARCHAR2(60 BYTE),
SECOND_LAST_NAME VARCHAR2(60 BYTE),
CC NUMBER(10,0),
EMAIL VARCHAR2(60 BYTE)
);
と:
create or replace type NESTED_ROW_USER as table of ROW_USER;
このタイプのデータを匿名ブロックで使用すると機能します。
set serveroutput on;
DECLARE
ROWUSR NESTED_ROW_USER;
BEGIN
select cast( multiset(select id, ROLES_ID, FIRST_NAME, SEGUNDO_NOMBRE,
FIRST_LAST_NAME, SECOND_LAST_NAME, CC, EMAIL from USERS where id = 1) as
NESTED_ROW_USER)
into ROWUSR
from users;
DBMS_OUTPUT.PUT_LINE(ROWUSR(1).id||','||ROWUSR(1).ROLES_ID||','||
ROWUSR(1).FIRST_NAME);
END;
ブロック結果:
Process PL/SQL exited successfully.
1,1,DIEGO
しかし、それをストアド プロシージャで使用して返すと、エラーが発生します。
手順:
create or replace PROCEDURE outnested(ROWUSR OUT NESTED_ROW_USR)
AS
BEGIN
select cast( multiset(select id, ROLES_ID, FIRST_NAME, SECOND_NAME,
FIRST_LAST_NAME, SECOND_LAST_NAME, CC, EMAIL from USERS where id = 1) as
NESTED_ROW_USER)
into ROWUSR
from users;
END;
エラー:
ORA-06550: line 5, column 16:
PLS-00302: component 'NESTED_ROW_USER' must be declared
ORA-06550: line 5, column 11:
PL/SQL: Item ignored
ORA-06550: line 14, column 16:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 10, column 3:
PL/SQL: Statement ignored
値を返さないのはなぜですか?