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

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

WBOY
リリース: 2016-06-21 09:09:01
オリジナル
1363 人が閲覧しました

mysql|oracle|プログラム

著者: Yu Feng

多くのアプリケーション プロジェクトがあり、最初は基本的に MYSQL データベースを使用してさまざまな機能要件を実現できますが、アプリケーション ユーザーの数とデータ量が増加するにつれて、MYSQL は徐々に負荷が高くなります。遅い、またはダウンタイムが発生するため、データを MYSQL から ORACLE に移行する必要があり、それに応じてアプリケーションもいくつかの変更を行う必要があります。以下に注意点をまとめてみましたので、皆様の参考になれば幸いです。

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

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

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

3. ページめくり SQL ステートメントの処理
MYSQL は、LIMIT を使用して位置を開始し、結果の位置を特定することもできます。セット。 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 タイプを使用し、ORACLE に付属の 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')

日付フィールドの数学的演算式には大きな違いがあります。 MYSQL は DATE_FIELD_NAME > SUBDATE (NOW (), INTERVAL 7 DAY) を使用して現在時刻から 7 日間を検索します。

6. NULL 文字の処理null フィールド 空でないフィールドが ORACLE で定義されている場合、空のコンテンツは許可されません。 MYSQL の NOT NULL に従って ORACLE テーブル構造を定義すると、データのインポート時にエラーが発生します。そのため、データをインポートする際には、NULL文字であるかどうかを判断し、NULL文字である場合は空白文字に変更する必要があります。

7. 文字列のあいまい比較
MYSQL では '% string%' のようなフィールド名が使用されますが、ORACLE では '% string%' のようなフィールド名も使用できますが、この方法はインデックスを使用できないため高速ではありません。文字列比較関数 instr(field name,'string')>0 を使用すると、より正確な検索結果が得られます。

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




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート