制約

HiRDB->Oracle移植SQL単体テストをしたい。
元々、HiRDBで開発されたオリジナルSQLに対する自動テスト設定/データが存在するので、これらをそのまま流用し、HiRDB/Oracle両版で結果の差分がないことをもって正常としたい。

だが、データを直で流用するのは難しかった。オリジナルのHiRDBテストデータはNULL列を含むが、Oracle環境はすべてNOT NULL制約なので、インポートでエラーとなるためだ。
HiRDB版でこの不整合が許されていたのは、テスト環境と本番環境の設定が異なるためである(HiRDB/Oracle両者とも本番環境ではすべてNOT NULLである。Oracleの場合、本番相当の設定しかしていない)。

さあ大変だ。NOT NULLを無効にしないと! ということで

  • ALTER TABLE X MODIFY CONSTRAINTS Y DISABLE

X表のY制約を無効状態に。
対象制約の絞込は

  • SELECT ... FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'X' AND SEARCH_CONDITION LIKE '% IS NOT NULL'

っていう感じですね。