ホームページ >php教程 >php手册 >MYSQL を ORACLE プログラムに移行する際の注意事項 (再掲)

MYSQL を ORACLE プログラムに移行する際の注意事項 (再掲)

WBOY
WBOYオリジナル
2016-06-21 09:12:311202ブラウズ

mysql|oracle|プログラム

MYSQL を ORACLE プログラムに移行する際の注意事項データ量の増加により、MYSQL は徐々に負荷がかかり始めました。接続が非常に遅くなったり、さらにはダウンしたりしたため、MYSQL から
ORACLE にデータを移行する必要があり、アプリケーションも同様に移行する必要がありました。それに応じていくつかの変更を加えます。以下に注意点をまとめてみましたので、皆様の参考になれば幸いです。

1. 自動増加データ型処理
MYSQL には自動増加データ型があり、レコード挿入時にこのフィールドを操作する必要はなく、データ値が自動的に取得されます。
ORACLE には自動増加するデータ型がありません。レコードを挿入するときは、このフィールドにシーケンス番号の次の
値を割り当てる必要があります。

CREATE SEQUENCE シーケンス番号の名前 (できればテーブル名 + シリアル番号タグ) INCREMENT BY 1 START WITH 1
MAXVALUE 99999 CYCLE NOCACHE;
シーケンスが自動的に増加する場合、最大値はフィールドの長さによって決まります。 Number NUMBER(6) が定義されており、最大値は 999999 です
INSERT ステートメントによって挿入されるこのフィールドの値は次のとおりです: シリアル番号の名前。NEXTVAL

2. 二重引用符を使用して次のことができます。 MYSQL では文字列をラップしますが、ORACLE でのみ使用できます。文字列は一重引用符で囲まれます。文字列
を挿入して変更する前に、一重引用符を置換する必要があります。1 つの一重引用符が出現するすべてを 2 つの一重引用符に置き換えます。

3. ページめくり SQL ステートメントの処理
MYSQL では、LIMIT を使用して位置を開始し、番号を記録します。また、SEEK を使用して位置を特定することもできます。結果セット。
ORACLE にとって、ページめくりの SQL ステートメントを処理するのはさらに面倒です。各結果セットには、その位置を示す ROWNUM フィールドが 1 つだけあり、ROWNUM80 は使用できません。
以下は、分析後の 2 つの優れた ORACLE ページング SQL ステートメントです (ID は一意のキーワードのフィールド名です):
ステートメント 1:
SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT)
ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 条件 1 ORDER BY 条件 2) WHERE NUMROW > 80 AND
NUMROW
ステートメント 2:
SELECT * FROM (( SELECT ROWNUM AS NUMROW, c .* from (select [FIELD_NAME,...] FROM
TABLE_NAME WHERE 条件 1 ORDER BY 条件 2) c) WHERE NUMROW > 80 AND NUMROW
4. 長い文字列の処理
長い文字列の処理にもORACLEの特徴があります。 INSERT および UPDATE 中に操作可能な文字列の最大長は、
4000 バイト以下です。これより長い文字列を挿入する場合は、フィールドに CLOB タイプを使用することを検討してください。その方法は、DBMS_LOB プログラム
パッケージを使用することです。オラクルが付属しています。変更されたレコードを挿入する前に、空でないことと長さを判断する必要があります。空にすることができないフィールド値や長さを超えるフィールド値は、最後の操作に戻ります。

5. 日付フィールドの処理
MYSQL の日付フィールドは DATE と TIME に分かれており、ORACLE の日付フィールドには年、月、日、時、分、秒の情報が含まれています
SYSDATE、秒まで正確、または文字を使用 文字列を日付型関数に変換 TO_DATE('2001-08-01','YYYY-MM-DD')
年-月-日 24 時:分:秒形式 YYYY- MM-DD HH24:MI:SS TO_DATE( ) 多くの日付形式があります。
ORACLE DOC を参照してください。
日付フィールドを文字列関数に変換します TO_CHAR('2001-08-01','YYYY-MM-DD HH24: MI:SS')

日付フィールド 数式は大きく異なります。 date_field_nameサブデート(現在()、7日間)) ORACLE で定義されている場合、空の内容は許可されません。
MYSQL の NOT NULL に従って ORACLE テーブル構造を定義するため、NULL 文字または空文字の場合はエラーが発生します。それをスペース文字列に変換します。7. 文字列のあいまい比較
MYSQL では '% string%' のようなフィールド名を使用します
ORACLE では '% string%' のようなフィールド名も使用できますが、この方法はインデックスを使用できないため高速ではありません
文字列比較関数を使用します instr( field name,'string')>0 とすると、より正確な検索結果が得られます

8. プログラムや関数では、データベースの操作作業が完了した後の結果セットとポインタの解放に注意してください。


ご興味がございましたら、MYSQL 管理者ガイドをお読みください。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。