ORA-00972: 标识符太长 - 如何在异常中捕获此错误

Posted

技术标签:

【中文标题】ORA-00972: 标识符太长 - 如何在异常中捕获此错误【英文标题】:ORA-00972: identifier is too long-how to catch this error in exception 【发布时间】: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 错误——当您尝试编译该过程时应该抛出该错误。 【参考方案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; /* 做任何需要处理的异常 */`.祝你好运。

以上是关于ORA-00972: 标识符太长 - 如何在异常中捕获此错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00972: 标识符太长 - 在 Grails 中避免它的最佳策略

ORA 00972 错误处理

ORA-00972_标识符过长

在长原始列中插入值

PLSQL报错,ORA-00972 identifier is too long

c++编程中语句太长如何换行