如何在长命名表中对Oracle-SQL长命名列进行注释?

时间:2013-03-20 15:22:50

标签: sql oracle identifier

我想执行这样的几个语句

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)

显然,Oracle不喜欢复合名称,如果它们的长度超过50个字符 有没有其他方法可以实现我想要的效果?

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

1 个答案:

答案 0 :(得分: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对象。

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

    在任何情况下,增加此列的大小(可能为61)都可以解决您的问题。如果我对整个过程一无所知,我不会更新表定义。