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 文字を超える複合名を好まないようです。意図した効果を達成するための代替手段はありますか?

名前を短くしたり、コメントを手動で導入したりできることはわかっています。しかし、私は同じ識別子を保持できるスクリプト化されたソリューションを好みます。

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 に答える