1

プロシージャの型データを 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

値を返さないのはなぜですか?

4

2 に答える 2

1

usariosコレクションのすべての要素に同じオブジェクト値を持つテーブルと同じ行数を持つコレクションを本当に生成しようとしていますか? それは奇妙に思えます。

私の推測では、あなたは本当にこのようなものが欲しいのです

create or replace PROCEDURE outnested(p_FILAUSU OUT NESTED_FILA_USUARIO)
AS
BEGIN
  select FILA_USUARIOr( id, 
                        ROLES_ID, 
                        PRIMER_NOMBRE, 
                        SEGUNDO_NOMBRE, 
                        PRIMER_APELLIDO, 
                        SEGUNDO_APELLIDO, 
                        CC, 
                        EMAIL )
    bulk collect into p_FILAUSU 
    from USUARIOS 
   where id =  1;
END;
于 2019-06-14T20:28:56.717 に答える