関数・クラス解説

oci_get_implicit_resultset

version:PHP 5 >= 5.6.0, PHP 7, PECL OCI8 (公式)

Oracle Database 12c の暗黙の結果セットを持つ親ステートメント・リソースから次の子ステートメント・リソースを返す

公式リファレンス

書式

oci_get_implicit_resultset ( resource $statement ) : resource

説明

ストアドまたは匿名の Oracle PL/SQL ブロックを実行後、 クエリの結果の連続したセットを取得するために使用されます。 そのブロックは、Oracle の DBMS_SQL.RETURN_RESULT PL/SQL 関数によりクエリの結果を返します。 これにより、PL/SQL ブロックはクエリ結果を簡単に返すことができます。

子ステートメントは、任意の OCI8 取得関数とともに使用できます。 その関数は、oci_fetch()、oci_fetch_all()、 oci_fetch_array()、oci_fetch_object()、 oci_fetch_assoc() または oci_fetch_row() です。

子ステートメントは、それらの親ステートメントのプリフェッチ値を継承するか、 または oci_set_prefetch() により明示的に設定することができます。

パラメータ

statement
oci_parse() により作成され、 oci_execute() により実行される 有効な OCI8 ステートメント ID 。 そのステートメント ID は、 暗黙の結果セットを返す SQL 文に関連づけられているかもしれませんし、 いないかもしれません。

返値

statement 上で使用可能な 次の子ステートメントに対する文ハンドラを返します。 子ステートメントが存在しないか、 または oci_get_implicit_resultset() への前の呼び出しにより、 すべての子ステートメントが返されていた場合、 FALSE を返します。

注意

注意: 大量の行を返すクエリの場合、oci8.default_prefetchを増やすかoci_set_prefetch() を使えばパフォーマンスが劇的に向上します。

サンプル

例1 ループ内で暗黙の結果セットを取得

$conn = oci_connect('hr', 'welcome', 'localhost/pdborcl'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $sql = 'DECLARE             c1 SYS_REFCURSOR;         BEGIN            OPEN c1 FOR SELECT city, postal_code FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);            OPEN c1 FOR SELECT country_id FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);         END;'; $stid = oci_parse($conn, $sql); oci_execute($stid); while (($stid_c = oci_get_implicit_resultset($stid))) {     echo "

新規の暗黙の結果セット:

\n";     echo "\n";     while (($row = oci_fetch_array($stid_c, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {         echo "\n";         foreach ($row as $item) {             echo "  \n";         }         echo "\n";     }     echo "
".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):" ")."
\n"; } // 出力です。 //    新規の暗黙の結果セット: //     Beijing 190518 //     Bern    3095 //     Bombay  490231 //    新規の暗黙の結果セット: //     CN //     CH //     IN oci_free_statement($stid); oci_close($conn);

例2 子ステートメントのハンドラをそれぞれ取得

$conn = oci_connect('hr', 'welcome', 'localhost/pdborcl'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $sql = 'DECLARE             c1 SYS_REFCURSOR;         BEGIN            OPEN c1 FOR SELECT city, postal_code FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);            OPEN c1 FOR SELECT country_id FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);         END;'; $stid = oci_parse($conn, $sql); oci_execute($stid); $stid_1 = oci_get_implicit_resultset($stid); $stid_2 = oci_get_implicit_resultset($stid); $row = oci_fetch_array($stid_1, OCI_ASSOC+OCI_RETURN_NULLS); var_dump($row); $row = oci_fetch_array($stid_2, OCI_ASSOC+OCI_RETURN_NULLS); var_dump($row); $row = oci_fetch_array($stid_1, OCI_ASSOC+OCI_RETURN_NULLS); var_dump($row); $row = oci_fetch_array($stid_2, OCI_ASSOC+OCI_RETURN_NULLS); var_dump($row); // 出力です。 //    array(2) { //      ["CITY"]=> //      string(7) "Beijing" //      ["POSTAL_CODE"]=> //      string(6) "190518" //    } //    array(1) { //      ["COUNTRY_ID"]=> //      string(2) "CN" //    } //    array(2) { //      ["CITY"]=> //      string(4) "Bern" //      ["POSTAL_CODE"]=> //      string(4) "3095" //    } //    array(1) { //      ["COUNTRY_ID"]=> //      string(2) "CH" //    } oci_free_statement($stid); oci_close($conn);

例3 プリフェッチ数を明示的に設定

$conn = oci_connect('hr', 'welcome', 'localhost/pdborcl'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $sql = 'DECLARE             c1 SYS_REFCURSOR;         BEGIN            OPEN c1 FOR SELECT city, postal_code FROM locations ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);         END;'; $stid = oci_parse($conn, $sql); oci_execute($stid); $stid_c = oci_get_implicit_resultset($stid); oci_set_prefetch($stid_c, 200);   // 子ステートメントから取得する前にプリフェッチを設定 echo "\n"; while (($row = oci_fetch_array($stid_c, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {     echo "\n";     foreach ($row as $item) {         echo "  \n";     }     echo "\n"; } echo "
".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):" ")."
\n"; oci_free_statement($stid); oci_close($conn);

例4 oci_get_implicit_resultset() を使用しない暗黙の結果セットの例

すべてのクエリからすべての結果が連続して返されます。

$conn = oci_connect('hr', 'welcome', 'localhost/pdborcl'); if (!$conn) {     $e = oci_error();     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } $sql = 'DECLARE             c1 SYS_REFCURSOR;         BEGIN            OPEN c1 FOR SELECT city, postal_code FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);            OPEN c1 FOR SELECT country_id FROM locations WHERE ROWNUM < 4 ORDER BY city;            DBMS_SQL.RETURN_RESULT(c1);         END;'; $stid = oci_parse($conn, $sql); oci_execute($stid); // 注意: oci_fetch_all および oci_fetch() はこの方法では使用できません echo "\n"; while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {     echo "\n";     foreach ($row as $item) {         echo "  \n";     }     echo "\n"; } echo "
".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):" ")."
\n"; // 出力です。 //    Beijing 190518 //    Bern 3095 //    Bombay 490231 //    CN //    CH //    IN oci_free_statement($stid); oci_close($conn);

ワード検索


※入力キーワードが、関数名・説明文・タグに含まれるものを検索

関数名アルファベット別

A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z _

最終更新一覧

stristr
 大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

stripslashes
 バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

stripos
 大文字小文字を区別せずに文字列が最初に現れる位置を取得する

stripcslashes
 addcslashes() でクォートされた文字列をアンクォートする

strip_tags
 文字列から HTML と PHP のタグを除去して返却

strcspn
 指定した文字が最初に現れる位置を調べる

strcoll
 ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

strcmp
 2つの文字列を比較し同じか(あるいは大小)を判定する

strchr
 strstr() のエイリアス

strcasecmp
 2つの文字列を比較(大文字小文字を区別せず同じとみなす)

カテゴリー一覧

PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール