我想执行这样的几个语句
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个字符 有没有其他方法可以实现我想要的效果?
我知道我可以缩短名称或手动引入评论。但我更喜欢脚本化的解决方案,它允许我保留相同的标识符。
答案 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
的内容:
SELECT *
FROM dba_dependencies
WHERE referenced_owner = 'CONVER'
AND referenced_name = 'CAPTURE_DDL'
这将列出所有具有引用此表的静态SQL的PL / SQL对象。
希望您能找到在此表中插入的程序,并从中推断出在DDL之后如何调用它。
在任何情况下,增加此列的大小(可能为61)都可以解决您的问题。如果我对整个过程一无所知,我不会更新表定义。