sql >> データベース >  >> RDS >> Oracle

PHPからOracleストアドプロシージャを呼び出す

    PHPでカーソルを操作するには、SELECTから直接行にアクセスする場合と比較して、3つの追加手順が必要です。 ステートメント。

    • 最初のステップは、oci_new_cursor()を使用してPHPでカーソルリソースを準備することです。 関数。これを使用して、適切なパラメータにバインドします。
    • 2番目のステップは、oci_bind_by_name()にパラメーターを追加することです。 機能
    • 通常のSQLステートメントを実行した後の3番目のステップは、oci_execute()を呼び出すことです。 カーソルリソース上。

    コード:

    //Connection does not change
    $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = JXYX.com)(PORT = 1521)))(CONNECT_DATA=(SID=DHSJKS)))";
    $conn = ocilogon("XXXXXX","XXXXXXXX",$db);          
    
    //Request does not change
    $sql = 'BEGIN SP_GET_MY_DATA(:POP, :SEG, :DUR, :VIEW, :PAGE, :OUTPUT_CUR); END;';            
    
    //Statement does not change
    $stmt = oci_parse($conn,$sql);                     
    oci_bind_by_name($stmt,':POP',$pop);           
    oci_bind_by_name($stmt,':SEG',$seg);           
    oci_bind_by_name($stmt,':DUR',$dur);           
    oci_bind_by_name($stmt,':VIEW',$view);           
    oci_bind_by_name($stmt,':PAGE',$page);    
    
    //But BEFORE statement, Create your cursor
    $cursor = oci_new_cursor($conn)
    
    // On your code add the latest parameter to bind the cursor resource to the Oracle argument
    oci_bind_by_name($stmt,":OUTPUT_CUR", $cursor,-1,OCI_B_CURSOR);
    
    // Execute the statement as in your first try
    oci_execute($stmt);
    
    // and now, execute the cursor
    oci_execute($cursor);
    
    // Use OCIFetchinto in the same way as you would with SELECT
    while ($data = oci_fetch_assoc($cursor, OCI_RETURN_LOBS )) {
        print_r($data);
    }
    

    私はOracle(および英語)にあまり精通していないので、このチュートリアル 。興味深い例があります。ストアドプロシージャと参照カーソルを見てください。 章!

    お役に立てば幸いです。




    1. MySQL 5.7.5+は、グループの最初の行を取得します

    2. SumとCaseを使用するMySQL

    3. PHPデータベースforeach()に無効な引数が指定されました

    4. トランザクション内のタイムスタンプの設定