oci_fetch_all

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_fetch_all — 쿼리에서 여러 행을 2차원 배열로 가져옵니다.


설명

oci_fetch_all(
    resource $statement,
    array &$output,
    int $offset = 0,
    int $limit = -1,
    int $flags = OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC
): int
                

oci_parse()에서 이전에 반환된 statement을 실행합니다.

쿼리에서 여러 행을 2차원 배열로 가져옵니다. 기본적으로 모든 행이 반환됩니다.

이 함수는 oci_execute()로 실행된 각 쿼리에 대해 한 번만 호출할 수 있습니다.


매개변수

statement
oci_parse()에 의해 생성되고 oci_execute()에 의해 실행되는 유효한 OCI8 문 식별자 또는 REF CURSOR 문 식별자.
output
반환된 행을 포함할 변수입니다.

LOB 열은 Oracle이 변환을 지원하는 문자열로 반환됩니다.

데이터 및 유형을 가져오는 방법에 대한 자세한 내용은 oci_fetch_array()를 참조하십시오.

offset
결과를 가져올 때 버릴 초기 행 수입니다. 기본값은 0이므로 첫 번째 행 이후가 반환됩니다.
limit
반환할 행 수입니다. 기본값은 offset + 1 이후의 모든 행을 반환함을 의미하는 -1입니다.
flags
매개변수 flags는 배열 구조와 연관 배열을 사용해야 하는지 여부를 나타냅니다.

oci_fetch_all() 배열 구조 모드

상수 설명
OCI_FETCHSTATEMENT_BY_ROW 외부 배열에는 쿼리 행당 하나의 하위 배열이 포함됩니다.
OCI_FETCHSTATEMENT_BY_COLUMN 외부 배열에는 쿼리 열당 하나의 하위 배열이 포함됩니다. 이것이 기본값입니다.

배열은 열 머리글 또는 숫자로 인덱싱될 수 있습니다. 하나의 인덱스 모드만 반환됩니다.

oci_fetch_all() 배열 인덱스 모드

상수 설명
OCI_NUM 숫자 인덱스는 각 열의 배열에 사용됩니다.
OCI_ASSOC 연관 인덱스는 각 열의 배열에 사용됩니다. 이것이 기본값입니다.

더하기 연산자 "+"를 사용하여 배열 구조와 인덱스 모드의 조합을 선택합니다.

대소문자를 구분하지 않는 Oracle의 기본 열 이름에는 대문자 배열 키가 있습니다. 대소문자를 구분하는 열 ​​이름에는 정확한 열 대소문자를 사용하는 배열 키가 있습니다. output에서 var_dump()를 사용하여 각 쿼리에 사용할 적절한 케이스를 확인합니다.

같은 이름의 열이 두 개 이상 있는 쿼리는 열 별칭을 사용해야 합니다. 그렇지 않으면 열 중 하나만 연관 배열에 나타납니다.


반환 값

0 이상일 수 있는 output의 행 수를 반환합니다.


Examples

예제 #1 oci_fetch_all() 예제

                  
<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res);

echo "$nrows rows fetched<br>\n";
var_dump($res);

// var_dump output is:
//    2 rows fetched
//    array(2) {
//      ["POSTAL_CODE"]=>
//      array(2) {
//        [0]=>
//        string(6) "00989x"
//        [1]=>
//        string(6) "10934x"
//      }
//      ["CITY"]=>
//      array(2) {
//        [0]=>
//        string(4) "Roma"
//        [1]=>
//        string(6) "Venice"
//      }
//    }

// Pretty-print the results
echo "<table border='1'>\n";
foreach ($res as $col) {
    echo "<tr>\n";
    foreach ($col as $item) {
        echo "    <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>
                    
                  

예제 #2 OCI_FETCHSTATEMENT_BY_ROW가 있는 oci_fetch_all() 예제

                   
<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW);

echo "$nrows rows fetched<br>\n";
var_dump($res);

// Output is:
//    2 rows fetched
//    array(2) {
//      [0]=>
//      array(2) {
//        ["POSTAL_CODE"]=>
//        string(6) "00989x"
//        ["CITY"]=>
//        string(4) "Roma"
//      }
//      [1]=>
//      array(2) {
//        ["POSTAL_CODE"]=>
//        string(6) "10934x"
//        ["CITY"]=>
//        string(6) "Venice"
//      }
//    }

oci_free_statement($stid);
oci_close($conn);

?>
                   
                 

예제 #3 OCI_NUM이 있는 oci_fetch_all()

                  
<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM);

echo "$nrows rows fetched<br>\n";
var_dump($res);

// Output is:
//    2 rows fetched
//    array(2) {
//      [0]=>
//      array(2) {
//        [0]=>
//        string(6) "00989x"
//        [1]=>
//        string(4) "Roma"
//      }
//      [1]=>
//      array(2) {
//        [0]=>
//        string(6) "10934x"
//        [1]=>
//        string(6) "Venice"
//      }
//    }

oci_free_statement($stid);
oci_close($conn);

?>
                    
                  

노트

메모:

offset을 사용하는 것은 매우 비효율적입니다. 건너뛸 모든 행은 데이터베이스에서 PHP로 반환되는 결과 집합에 포함됩니다. 그런 다음 폐기됩니다. SQL을 사용하여 쿼리에서 행의 오프셋과 범위를 제한하는 것이 더 효율적입니다. 예는 oci_fetch_array()를 참조하십시오.

메모: 많은 수의 행을 반환하는 쿼리는 oci_fetch_array()와 같은 단일 행 페칭 함수를 사용하는 경우 메모리 효율성이 더 높을 수 있습니다.

메모: 많은 수의 행을 반환하는 쿼리의 경우 oci8.default_prefetch를 늘리거나 oci_set_prefetch()를 사용하여 성능을 크게 향상시킬 수 있습니다.

메모: Oracle Database 12c 암시적 결과 집합에서 행을 반환하지 않습니다. 대신 oci_fetch_array()를 사용하십시오.


기타