【发布时间】:2019-09-21 01:28:38
【问题描述】:
我有一个带有 CTAS 查询的普通 PLSQL 块。
BEGIN
EXECUTE IMMEDIATE'
CREATE TABLE ZZZ_TEMP NOLOGGING PARALLEL AS
SELECT /*+ PARALLEL(a,4) */
*
FROM
HI0XXX001.HI_TABLE_NAME a
LEFT JOIN
HR_001_GROUP B
ON
a.EMPLOYERGROUP_UD =B.ACC_NUM
LEFT JOIN
HR_002_GROUP l
ON
a.EMPLOYERGROUP_UD =l.EMPLOYERGROUP_UD
AND
a.GRP_CON_UD_COV_CONTRACT_NAME=l.GRP_CON_UD_COV_CONTRACT_NAME
';
EXCEPTION WHEN OTHERS THEN Dbms_Output.put_line(SQLERRM);
END;
假设 HR_002_GROUP 表在我运行此块的架构中不存在。有什么方法可以显示 HR_002_GROUP 表不存在的错误消息?
我发布的查询只是一个示例场景。我们在 ETL 结构中工作,我们有一大行查询脚本,将数百万个数据从许多 HI 表中的一个插入到另一个带有前缀 VH 的小表中。我在左连接中有大约 15-30 个表。选择每个左连接以了解哪个表实际导致错误非常耗时。
【问题讨论】:
-
试试
DBMS_UTILITY.FORMAT_ERROR_STACK而不是SQLERRM -
这仍然不会告诉你它在抱怨哪个表。
-
假设您有一个用于创建 SQL 的变量,为什么错误消息不能简单地不显示变量的值?或者您可以使用 raise application error 来引发自定义错误和消息
标签: oracle plsql error-handling dynamic-sql