0

我想执行几个这样的语句

comment on column Quite_A_Long_Table_Identifier.Quite_A_Long_Column_Identifier is 'Something';

我收到与此类似的错误消息。

ORA-00604: error occurred at recursive SQL level 1
ORA-12899: value too large for column "CONVER"."CAPTURE_DDL"."OBJECT_NAME" (actual: 60, maximum: 50)
ORA-06512: at line 195
ORA-12899: value too large for column "CONVER"."CAPTURE_DDL"."OBJECT_NAME" "CONVER"."CAPTURE_DDL"."OBJECT_NAME" (actual: 60, maximum: 50)

显然,如果复合名称的长度超过 50 个字符,Oracle 不喜欢复合名称是否有任何替代方法可以达到我想要的效果?

我知道我可以缩短名称或手动引入评论。但我更喜欢允许我保留相同标识符的脚本解决方案。

4

1 回答 1

2

我无法在 9iR2、11gR1 和 11gR2 上重现:

SQL> --           123456789012345678901234567890
SQL> CREATE TABLE Quite_A_Long_Table_Identifier (
  2               Quite_A_Long_Column_Identifier NUMBER
  3  );

Table created

SQL> COMMENT ON COLUMN 
 2      Quite_A_Long_Table_Identifier.Quite_A_Long_Column_Identifier IS 'fooo';

Comment added

"CONVER"."CAPTURE_DDL"."OBJECT_NAME"无论如何,它看起来不像 Oracle 对象,因此它必须是您特定数据库的自定义。

我的猜测是你有一个DDL 触发器或一个捕获过程(审计),它在一个太小的列中记录 DDL 语句。你能检查你的数据库触发器吗?


以下是您可以做的一些事情来找到确切试图插入的内容CONVER.CAPTURE_DDL.OBJECT_NAME

  1. 跟踪您的会话。查看跟踪文件。您将看到调用了什么 PL/SQL。
  2. DBA_DEPENDENCIES

    SELECT *
      FROM dba_dependencies
     WHERE referenced_owner = 'CONVER'
       AND referenced_name = 'CAPTURE_DDL'
    

    这将列出所有具有引用该表的静态 SQL 的 PL/SQL 对象。

希望您能找到插入该表的程序,并从中推断出它是如何在 DDL 之后被调用的。

无论如何,增加此列的大小(可能增加到 61)应该可以解决您的问题。如果我不清楚整个过程,我不会更新表定义。

于 2013-03-20T15:38:35.420 回答