【发布时间】:2018-03-12 14:45:31
【问题描述】:
我有如下的 PL/SQL 表类型和过程。它只是代码的一部分。在填充 PL/SQL 表类型变量时,我遇到了异常。
CREATE OR REPLACE TYPE OBJ_EMPLOYEE AS OBJECT
(
EMPID NUMBER(12) ,
EMPLOYEENAME VARCHAR2(100) ,
/* more attributes */
STATUS VARCHAR2(20) ,
UPDTDATE DATE ,
);
CREATE OR REPLACE TYPE TAB_EMPLOYEE IS TABLE OF OBJ_EMPLOYEE;
CREATE OR REPLACE PROCEDURE sp_getEmpDetails
(
p_ErrorCode_o OUT VARCHAR2,
p_ErrorMsg_o OUT VARCHAR2
)
IS
TEMP_EMPLOYEE TAB_EMPLOYEE := TAB_EMPLOYEE();
BEGIN
/* Some code */
BEGIN
SELECT OBJ_EMPLOYE
(
EMPID ,
EMPLOYEENAME ,
/* more attributes */
STATUS ,
UPDTDATE
)
BULK COLLECT INTO TEMP_EMPLOYEE
FROM (
SELECT EMPID,
EMPLOYEENAME,
/* more attributes */
STATUS,
SYSDATE AS UPDTDATE
FROM TEST_TABLE
);
EXCEPTION
WHEN OTHERS THEN
p_vcErrorCode_o := SQLCODE;
p_vcErrorMsg_o := 'Fail 1' || SQLERRM;
END;
/* Some code */
EXCEPTION
WHEN OTHERS THEN
p_vcErrorCode_o := SQLCODE;
p_vcErrorMsg_o := SQLERRM;
END sp_getEmpDetails;
/
我遇到异常 - “ORA-22814:属性或元素值大于类型中指定的值”。在检查每一列的长度和数据后,我发现 TEST_TABLE.EMPLOYEENAME 的值超过了 100 个字符。 有没有办法打印对象填充失败的列名?
提前感谢您的帮助
【问题讨论】:
-
不,没有常规方法可以获取此信息。
-
不相关的...ISPL ?