我正在使用Oracle数据库(SQL Developer作为客户端)和长查询(* 大多数查询都在5 k和10 k行之间,最长的达到60 k行 *)。
**我的目标是在SQL Developer上运行查询时,我可以看到错误发生的确切行。**目前SQL Developer/Oracle DB显示错误类型(例如“missing expression”或“missing right parenthesis”),但不显示错误的位置,迫使我分析查询的每一位。
有没有一种方法可以让数据库显示错误行,或者我什么也做不了?(* 没有,我不能减少查询的大小,因为它们来自外部源;我只需要确保它们工作并修复任何错误 *)。我也已经尝试过其他客户端(VSCode,Toad,DBeaver)。
示例:运行以下查询:
SELECT
'Line 1' as column_1,
'Line 2' as column_2,
CASE WHEN 1= THEN ELSE NULL as column_3,
'Line 4' as column_4,
'Line 5' as column_5
FROM dual;
字符串
如果你想测试一个更长的查询,我已经使用this 5000-lines query作为测试,它没有显示错误在哪里(spoiler:line 2507)。
3条答案
按热度按时间jgwigjjp1#
在SQL developer中点击Query builder会显示错误发生的确切行。我使用了您提供的示例SQL,得到了以下输出。请注意,Query builder不会识别表或视图是否不存在,它只会验证SQL语法。
x1c 0d1x的数据
Edit 1:-也可以使用DBMS_SQL.LAST_ERROR_POSITION来识别错误行。下面的链接
ORA-01722: Invalid Number, find specific line
anauzrmj2#
据我所知,在过去的20年里,当在一些存储的程序单元或匿名PL/SQL块中有一些SQL语句时,你不能得到确切的行,那里有一些缺失的表达式或括号或其他东西。你可以做的是有一个日志,在那里记录错误并以下面的方式处理异常:
字符串
您的日志记录过程将如下所示:
型
因此,您可以让所有元素都发现特定SQL语句中的错误。
62lalag43#
好吧,我的SQL Developer(右)以及SQL*Plus(左)(与Oracle保持一致)显示了错误点:
的数据
我相信你的工具应该也能做到这一点。如果不能,你能把你自己的截图贴出来吗?这样我们就不用猜了。