如何处理pl / sql中的invalid_identifier异常?

用户名

我需要检查某个SELECT语句是否包含表中不存在的字段(列),例如:

从表1中选择col1,col2,col3

如果col1不存在,我想显示“缺少字段”,而是让用户得到一个无效的标识符错误。

我这样做的最佳和短期选择是什么?

崩溃

该代码片段将帮助您入门:

set serveroutput on
DECLARE
   exc_invalid_id EXCEPTION;
   PRAGMA EXCEPTION_INIT(exc_invalid_id, -904);
   l_message   VARCHAR2(4000);
BEGIN
   EXECUTE IMMEDIATE '
      SELECT col1
           , col2
           , col3
        FROM table1
   ';
EXCEPTION
   WHEN exc_invalid_id THEN
      l_message := regexp_replace(sqlerrm, '^[A-Z]{3}-[0-9]{5}: "([^"]+)".*$', '\1');

      dbms_output.put_line ( 'missing field '''||l_message||'''');
      dbms_output.put_line ( 'exception: sqlcode='||SQLCODE||', sqlerrm='''||sqlerrm||'''');

   WHEN OTHERS THEN
      RAISE;
END;
/
show errors

解释:

  • 您声明一个用户定义的异常。
  • 您将异常与抛出在未知列标识符(代码为)上的Oracle错误相关联00904
  • sql查询作为本机动态sql执行-否则代码将不会首先编译。
  • 错误消息由您选择的文本组成,并附有令人讨厌的列名。该名称是通过正则表达式从oracle错误消息中提取的。请注意,此示例尚未针对多个冒犯性名称的情况进行过测试-但是,您应该可以轻松应对。
  • 输出的第二行产生原始错误消息,并且仅出于说明目的而包含其中。
  • 异常处理程序仅响应您的异常,并重新引发要在周围块之一中处理的任何其他异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理pl / sql中的invalid_identifier异常?

来自分类Dev

PL / SQL:如何处理DBMS_AQ.DEQUEUE的超时

来自分类Dev

如何处理PL / pgSQL函数中的应用程序设置的有效方法

来自分类Dev

如何处理PL / pgSQL函数中的应用程序设置的有效方法

来自分类Dev

EJB如何处理异常?

来自分类Dev

如何处理gem的异常

来自分类Dev

Deno:如何处理异常

来自分类Dev

如何处理arraylist异常?

来自分类Dev

如何处理登录异常?

来自分类Dev

如何处理ContentProvider的异常?

来自分类Dev

如何处理 HttpAsyncClient 异常

来自分类Dev

如何处理Asmack中的临时异常

来自分类Dev

如何处理硒中的异常?

来自分类Dev

如何处理Task中的不同异常?

来自分类Dev

如何处理Callable <Void>中的异常

来自分类Dev

如何处理lambda中的检查异常?

来自分类Dev

如何处理 Django 1.8.7 中的异常

来自分类Dev

sql中没有返回行时如何处理异常

来自分类Dev

在Lua中,如何处理?

来自分类Dev

如何处理XSLT中的处理指令

来自分类Dev

如何处理牛仔websocket处理程序中的异常?

来自分类Dev

如何处理单例模式中的异常处理?

来自分类Dev

MEF ComposeParts。如何处理插件异常

来自分类Dev

如何处理gitpython clone异常?

来自分类Dev

使用DTO时如何处理异常

来自分类Dev

如何处理或避免BlockedIndefinitelyOnSTM异常?

来自分类Dev

如何处理JSF多个意外异常?

来自分类Dev

如何处理ExecutorService任务引发的异常?

来自分类Dev

如何处理令牌不匹配异常