Oracle在将对象作为输出参数PL/SQL传递时对未初始化组合的引用

Oracle在将对象作为输出参数PL/SQL传递时对未初始化组合的引用,oracle,plsql,oracle-sqldeveloper,Oracle,Plsql,Oracle Sqldeveloper,我对“ORA-06530:引用未初始化的组合”有一个问题。据我所知,该对象已初始化 CREATE OR REPLACE TYPE t_RetVal AS OBJECT ( var_n_retVal NUMBER, var_n_sqlcode NUMBER, var_v_sqlerrm VARCHAR(255), CONSTRUCTOR FUNCTION t_RetVal(SELF IN OUT NOCOPY t_RetVal) RETURN SELF AS RES

我对“ORA-06530:引用未初始化的组合”有一个问题。据我所知,该对象已初始化

CREATE OR REPLACE TYPE t_RetVal AS OBJECT
(
    var_n_retVal NUMBER,
    var_n_sqlcode NUMBER,
    var_v_sqlerrm VARCHAR(255),
    CONSTRUCTOR FUNCTION t_RetVal(SELF IN OUT NOCOPY t_RetVal) RETURN SELF AS RESULT
);
/
CREATE OR REPLACE TYPE BODY t_RetVal AS
CONSTRUCTOR FUNCTION t_RetVal(SELF IN OUT NOCOPY t_RetVal) RETURN SELF AS RESULT IS
    BEGIN
    SELF.var_n_retVal       := 1; 
    SELF.var_n_sqlcode      := 0; 
    SELF.var_v_sqlerrm      := ''; 
    RETURN;
    END;
END;    

create or replace FUNCTION    get_Something(
    id IN NUMBER,
    out_t_RetVal OUT NOCOPY  t_RetVal
) 
RETURN NUMBER
IS
    retVal NUMBER := 1;
BEGIN
    out_t_RetVal.var_n_retVal:= 1;
    out_t_RetVal.var_n_sqlcode := 0;
    out_t_RetVal.var_v_sqlerrm := '';
    RETURN out_t_RetVal;
END;
在这个过程中,我执行以下操作,并不断获得“ORA-06530:引用未初始化的组合”


为什么Oracle报告此错误?如何正确地将对象作为out参数传递?

out\t\u retval在函数中声明为out。并且它在函数内部没有初始化-因此出现了errorThank。因此,简单地说出来:t_RetVal=t_RetVal();函数本身会解决这个问题吗?我相信会的,除非代码中有其他问题。但这很容易尝试。而且您不需要在外部过程中初始化它!谢谢
create or replace procedure PROC is

    var_t_SubFuncRetVal t_RetVal;
    v_n_retVal number := 0;
    v_error_text varchar2(1000); 
    
    BEGIN /*PROCEDURE START*/

    var_t_SubFuncRetVal                 := t_RetVal();
    
    v_n_retVal := get_Something( id, var_t_SubFuncRetVal); 
    IF (var_t_SubFuncRetVal.var_n_retVal >= 0) THEN
        IF (var_t_SubFuncRetVal.var_n_retVal = 0) THEN
            ....
        ELSE
            ....
        END IF;
    ELSE
        v_error_text := 'Error message is '|| 'SQLCODE: '||var_t_SubFuncRetVal.var_n_sqlcode||' -- ERROR: '||var_t_SubFuncRetVal.var_v_sqlerrm;
    END IF;
EXCEPTION
WHEN OTHERS THEN  
    ROLLBACK;
END PROC;