一部のInformix ESQLをOracle Pro * Cに変換しようとしています。既存のInformixコードでは、 "SERIAL"データ型を使用して自動的にインクリメントする列を示しました。 Oracleのマニュアルによれば、Informix用のOracle Migration Workbenchはこれを処理できる必要があり、関連するOracleシーケンスおよびトリガーを使用して「SERIAL」データ型を「NUMBER」に変換することが説明されています。しかし、ツールを実行しようとすると、単に "SERIAL"という語句が "ERROR(SERIAL)"に置き換えられますので、手動でトリガ/シーケンスを追加しようとしています。Pro * CのOracle NUMBER/Sequence/TriggerへのInformix "SERIAL"
ここの例:http://docs.oracle.com/html/B16022_01/ch2.htm#sthref112は、これを実行できる方法を示しています。シーケンスは、そのようなトリガーを作成しようとすると、しかし、かなりまっすぐ進むように見える:
CREATE TRIGGER clerk.TR_SEQ_11_1
BEFORE INSERT ON clerk.JOBS FOR EACH ROW
BEGIN
SELECT clerk.SEQ_11_1.nextval INTO :new.JOB_ID FROM dual; END;
のPro * Cプリプロセッサは、ここで「CREATE」のキーワードをピックアップして、私が使用することを許可されていないよと判断しますホスト変数 ":new.JOB_ID"。これは、ホスト変数を "CREATE"ステートメントと一緒に使用することができないためです。
私の質問は、ホスト変数を使用して列名を指定せずに特定の列にOracleシーケンスをリンクするトリガーを作成する方法はありますか? Oracleのマニュアルには、移行ツールが対処できなければならないことが示されています。つまり、これを実行する方法がいくつかあることを意味します。しかし、私が見つけたすべてのトリガ使用例は、プリプロセッサに不平を言うホスト変数を使用しています。
ありがとうございます。
(注:私は、上記の例では、Oracleのドキュメントの例からのトリガ/シーケンス/列名を使用しました)
なぜSQLスクリプトでトリガーを作成しないのですか?私はCプログラムの中からこれを行う必要はないと思う。 –
既存のESQLプログラムはCで書かれています。私の仕事はPro * Cを使用するように既存のコードを変更することです。残念ながら、私はそれがどのように機能するかについて多くを変える権限はありません。 –