Oracle在将对象作为输出参数PL/SQL传递时对未初始化组合的引用
我对“ORA-06530:引用未初始化的组合”有一个问题。据我所知,该对象已初始化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
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;