【问题标题】:ORA-00972: identifier is too long-how to catch this error in exceptionORA-00972: 标识符太长 - 如何在异常中捕获此错误
【发布时间】:2015-06-15 16:47:05
【问题描述】:

如何捕获此错误

'ORA-00972: identifier is too long'在异常部分

在 oracle pl/sql 中,

你能给我举个例子吗

【问题讨论】:

  • 除非您动态构建 SQL 语句,否则您不能。这是正常代码中的编译错误而不是运行时错误。您会在创建代码时注意到异常,而不是在执行代码时。
  • 嗨贾斯汀,你能提供这个例子吗?这将非常有用
  • 举个例子?通常,当您运行尝试使用无效标识符创建过程的CREATE OR REPLACE PROCEDURE 代码时,您会看到此类错误。当您尝试创建过程时会看到错误,并且您会像修复任何其他语法错误一样对其进行修复。您不会编写代码来捕获它。除非你在做动态构建 SQL 或 PL/SQL 之类的事情。
  • 嗨贾斯汀,谢谢你的回答..我创建了一个带有 varchar2 参数的函数,所有异常都由它处理..我也想抓住这个,因为如果这个函数/过程被调用表单应用程序以及如果用户输入大字符串怎么办,它会给出“ORA-00972:标识符太长”错误..所以我想处理并写一个好的消息而不是错误......再次感谢您
  • 前端是否将SQL语句作为输入参数传递给函数,然后该函数使用execute immediatedbms_sql动态执行?否则,我很难看到您将如何根据参数的值得到 ORA-00972 错误——当您尝试编译该过程时应该抛出该错误。

标签: oracle plsql exception-handling


【解决方案1】:

捕获任何异常的方法是使用正确的异常号(在本例中为-972)初始化一个 EXCEPTION 变量,然后在 EXCEPTION 块中使用它:

DECLARE
  excpIdentifier_too_long  EXCEPTION;
  PRAGMA EXCEPTION_INIT(excpIdentifier_too_long, -972);
BEGIN
  NULL;  -- whatever
EXCEPTION
  WHEN excpIdentifier_too_long THEN
    DBMS_OUTPUT.PUT_LINE('Do something useful here');
END;

祝你好运。

【讨论】:

  • 嗨,鲍勃,为什么这个错误不会出现在“当其他人”异常部分中
  • 如果您愿意,我想您可以这样处理。在这种情况下,您应该执行类似 'WHEN OTHERS IF SQLCODE = -973 THEN NULL; /* 做任何需要处理的异常 */`.祝你好运。
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2012-07-09
  • 2015-04-09
相关资源
最近更新 更多