gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:01:16 27 4
gpt4 key购买 nike

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

从table1中选择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 查询作为 native 动态 sql 执行 - 否则代码不会首先编译。
  • 错误消息由您选择的文本组成,并辅以有问题的列名称。该名称是通过正则表达式从 oracle 错误消息中提取的。请注意,此示例尚未针对多个违规名称的情况进行测试 - 但是,您应该有所了解。
  • 第二行输出产生原始错误消息,仅供说明之用。
  • 异常处理程序仅响应您的异常并重新引发要在周围 block 之一中处理的任何其他异常。

关于oracle - 如何处理 pl/sql 中的 invalid_identifier 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com