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 immediate
或dbms_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 中避免它的最佳策略