ホームページ > バックエンド開発 > PHPチュートリアル > PHP で Oracle データベースのストアド プロシージャと関数を使用する方法

PHP で Oracle データベースのストアド プロシージャと関数を使用する方法

WBOY
リリース: 2023-07-12 22:08:01
オリジナル
1178 人が閲覧しました

PHP で Oracle データベースのストアド プロシージャと関数を使用する方法

はじめに:
Oracle は、一般的に使用されるリレーショナル データベース管理システムです。開発では、多くの場合、ストアド プロシージャとストアド関数を使用する必要があります。より効率的で柔軟なデータ処理機能を提供します。この記事では、PHP で Oracle データベースのストアド プロシージャと関数を使用する方法を紹介し、いくつかの実用的なコード例を示します。

1. ストアド プロシージャを作成する
Oracle では、ストアド プロシージャは、パラメータを受け取って結果を返す、プリコンパイルされた SQL ステートメントのセットです。以下は、2 つの数値の合計を計算するストアド プロシージャを Oracle データベースに作成する方法を示す簡単な例です。

  1. まず、Oracle データベースで SQL コマンド ライン ツールを開くか、ビジュアル ツール (PL/SQL Developer など) を使用してデータベースに接続します。
  2. 次に、次の SQL ステートメントを入力してストアド プロシージャを作成します。
CREATE OR REPLACE PROCEDURE calculate_sum(
    num1 IN NUMBER,
    num2 IN NUMBER,
    sum OUT NUMBER
)
AS
BEGIN
    sum := num1 + num2;
END;
/
ログイン後にコピー

上の例では、calculate_sum はストアド プロシージャの名前です。 ##num1num2 は入力パラメータ、sum は出力パラメータです。

    次に、ストアド プロシージャを保存してコンパイルします。
2. ストアド プロシージャを使用する

PHP では、OCI8 拡張機能を介して Oracle データベースに接続し、ストアド プロシージャを呼び出すことができます。

    まず、OCI8 拡張機能がインストールされ、有効になっていることを確認します。
  1. PHP コードでは、次のコード例を使用して Oracle データベースに接続します。
  2. <?php
        $conn = oci_connect('username', 'password', 'connection_string');
        if (!$conn) {
            $e = oci_error();
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
        }
    ?>
    ログイン後にコピー
上記のコードでは、

username をユーザー名に置き換えます。 「database」では、 password をデータベースのパスワードに、connection_string をデータベース接続文字列に置き換えます。

    次に、次のコード例を使用してストアド プロシージャを呼び出すことができます。
  1. <?php
        $sql = "BEGIN calculate_sum(:num1, :num2, :sum); END;";
        $stmt = oci_parse($conn, $sql);
    
        $num1 = 10;
        $num2 = 20;
        oci_bind_by_name($stmt, ':num1', $num1);
        oci_bind_by_name($stmt, ':num2', $num2);
        oci_bind_by_name($stmt, ':sum', $sum, 20);
    
        oci_execute($stmt);
    
        echo "Sum: " . $sum;
    
        oci_free_statement($stmt);
        oci_close($conn);
    ?>
    ログイン後にコピー
上記のコードでは、

calculate_sum は、ストアド プロシージャ、:num1:num2、および :sum はパラメータ名です。 oci_bind_by_name 関数を使用して、PHP 変数をストアド プロシージャのパラメータにバインドし、パラメータを渡して結果を受け取ることができます。

oci_parse 関数は SQL ステートメントを解析してステートメント ハンドルを返すために使用され、oci_execute 関数は SQL ステートメントを実行するために使用されることに注意してください。

3. 関数の作成

ストアド プロシージャに加えて、Oracle は関数の作成もサポートしています。関数は、パラメーターを受け取り、単一の結果を返すことができるプリコンパイルされた SQL ステートメントのセットです。以下は、Oracle データベースで 2 つの数値の差を計算する関数を作成する方法を示す簡単な例です。

    Oracle データベースで SQL コマンド ライン ツールを開くか、ビジュアル ツール (PL/SQL Developer など) を使用してデータベースに接続します。
  1. 次の SQL ステートメントを入力して関数を作成します。
  2. CREATE OR REPLACE FUNCTION calculate_difference(
        num1 IN NUMBER,
        num2 IN NUMBER
    )
    RETURN NUMBER
    AS
        diff NUMBER;
    BEGIN
        diff := num1 - num2;
        RETURN diff;
    END;
    /
    ログイン後にコピー
上記の例では、

calculate_difference は関数の名前 num1# です。 ## および num2 は入力パラメータです。

関数を保存してコンパイルします。
  1. 4. 関数の使用
Oracle 関数の使用方法は、ストアド プロシージャの使用方法と似ています。以下は、PHP で上記の関数を呼び出すためのサンプル コードです。

<?php
    $conn = oci_connect('username', 'password', 'connection_string');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }

    $sql = "SELECT calculate_difference(:num1, :num2) AS difference FROM DUAL";
    $stmt = oci_parse($conn, $sql);

    $num1 = 50;
    $num2 = 30;
    oci_bind_by_name($stmt, ':num1', $num1);
    oci_bind_by_name($stmt, ':num2', $num2);

    oci_execute($stmt);

    $result = oci_fetch_assoc($stmt);
    echo "Difference: " . $result['DIFFERENCE'];

    oci_free_statement($stmt);
    oci_close($conn);
?>
ログイン後にコピー

上記のコードでは、:num1

:num2 は関数のパラメーター名です。 , DUAL は Oracle の仮想テーブルで、単一行および単一列の結果を返すために使用されます。 結論:

ストアド プロシージャと関数を使用することで、より効率的で柔軟なデータ処理機能を提供できます。 PHP で Oracle データベースのストアド プロシージャと関数を使用する場合、OCI8 拡張機能を介してデータベースに接続し、ストアド プロシージャと関数を呼び出すことができます。この記事では、読者がよりよく理解して適用できるように、関連するコード例を示します。

以上がPHP で Oracle データベースのストアド プロシージャと関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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