oci_execute

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

oci_execute — 명령문 실행


설명

oci_execute(resource $statement, int $mode = OCI_COMMIT_ON_SUCCESS): bool

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

실행 후 INSERT와 같은 문은 기본적으로 데이터베이스에 커밋된 데이터를 갖습니다. SELECT와 같은 문의 실행은 쿼리의 논리를 수행합니다. 쿼리 결과는 이후에 oci_fetch_array()와 같은 함수를 사용하여 PHP에서 가져올 수 있습니다.

구문 분석된 각 문은 여러 번 실행되어 재분석 비용을 절약할 수 있습니다. 이것은 데이터가 oci_bind_by_name()으로 바인딩될 때 INSERT 문에 일반적으로 사용됩니다.


매개변수

statement
유효한 OCI 문 식별자입니다.
mode
선택적 두 번째 매개변수는 다음 상수 중 하나일 수 있습니다.

실행 모드

상수 설명
OCI_COMMIT_ON_SUCCESS 문이 성공하면 이 연결에 대한 모든 미해결 변경 사항을 자동으로 커밋합니다. 이것이 기본값입니다.
OCI_DESCRIBE_ONLY 쿼리 메타 데이터를 oci_field_name()과 같은 함수에서 사용할 수 있도록 하되 결과 집합을 생성하지 마십시오. oci_fetch_array()와 같은 후속 페치 호출은 실패합니다.
OCI_NO_AUTO_COMMIT 변경 사항을 자동으로 커밋하지 마십시오. PHP 5.3.2(PECL OCI8 1.4) 이전에는 OCI_NO_AUTO_COMMIT에 해당하는 OCI_DEFAULT를 사용합니다.

OCI_NO_AUTO_COMMIT 모드를 사용하면 트랜잭션을 시작하거나 계속합니다. 연결이 닫히거나 스크립트가 종료되면 트랜잭션이 자동으로 롤백됩니다. 명시적으로 oci_commit()을 호출하여 트랜잭션을 커밋하거나 oci_rollback()을 호출하여 트랜잭션을 중단합니다.

데이터를 삽입하거나 업데이트할 때 관계형 데이터 일관성과 성능상의 이유로 트랜잭션을 사용하는 것이 좋습니다.

쿼리를 포함한 모든 문장에 OCI_NO_AUTO_COMMIT 모드를 사용하고 oci_commit() 또는 oci_rollback()이 이후에 호출되지 않으면 OCI8은 데이터가 변경되지 않았더라도 스크립트 끝에서 롤백을 수행합니다. 불필요한 롤백을 피하기 위해 많은 스크립트는 쿼리 또는 PL/SQL에 대해 OCI_NO_AUTO_COMMIT 모드를 사용하지 않습니다. 동일한 스크립트에서 다른 모드로 oci_execute()를 사용할 때 애플리케이션에 대한 적절한 트랜잭션 일관성을 보장하도록 주의하십시오.


반환 값

성공하면 true를, 실패하면 false를 반환합니다.


Examples

예제 #1 쿼리용 oci_execute()

                  
<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, 'SELECT * FROM employees');
oci_execute($stid);

echo "<table border='1'>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "    <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>
                    
                  

예제 #2 모드를 지정하지 않은 oci_execute() 예제

                   
<?php

// Before running, create the table:
//   CREATE TABLE MYTABLE (col1 NUMBER);

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');

oci_execute($stid); // The row is committed and immediately visible to other users

?>
                   
                 

예제 #3 OCI_NO_AUTO_COMMIT가 있는 oci_execute() 예제

                  
<?php

// Before running, create the table:
//   CREATE TABLE MYTABLE (col1 NUMBER);

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (:bv)');
oci_bind_by_name($stid, ':bv', $i, 10);
for ($i = 1; $i <= 5; ++$i) {
    oci_execute($stid, OCI_NO_AUTO_COMMIT);  // use OCI_DEFAULT for PHP <= 5.3.1
}
oci_commit($conn);  // commits all new values: 1, 2, 3, 4, 5

?>
                    
                  

예제 #4 커밋 모드가 다른 oci_execute() 예제

                   
<?php

// Before running, create the table:
//   CREATE TABLE MYTABLE (col1 NUMBER);

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (123)');
oci_execute($stid, OCI_NO_AUTO_COMMIT);  // data not committed

$stid = oci_parse($conn, 'INSERT INTO mytab (col1) VALUES (456)');
oci_execute($stid);  // commits both 123 and 456 values

?>
                   
                 

예제 #5 OCI_DESCRIBE_ONLY가 있는 oci_execute() 예제

                  
<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, 'SELECT * FROM locations');
oci_execute($s, OCI_DESCRIBE_ONLY);
for ($i = 1; $i <= oci_num_fields($stid); ++$i) {
    echo oci_field_name($stid, $i) . "<br>\n";
}

?>
                    
                  

노트

메모:

트랜잭션은 연결이 닫힐 때나 스크립트가 종료될 때 중 가장 빠른 시점에 자동으로 롤백됩니다. 명시적으로 oci_commit()을 호출하여 트랜잭션을 커밋합니다.

명시적으로 또는 기본적으로 OCI_COMMIT_ON_SUCCESS 모드를 사용하는 oci_execute()에 대한 모든 호출은 커밋되지 않은 이전 트랜잭션을 커밋합니다.

CREATE 또는 DROP과 같은 모든 Oracle DDL 문은 커밋되지 않은 트랜잭션을 자동으로 커밋합니다.

메모: oci_execute() 함수는 일반적으로 명령문을 데이터베이스로 보내기 때문에 oci_execute()는 가벼운 로컬 oci_parse() 함수가 식별하지 못하는 일부 명령문 구문 오류를 식별할 수 있습니다.


기타

  • oci_parse() - 실행을 위해 Oracle 문을 준비합니다.