LVIII. 오라클 8 함수

이 함수들은 Oracle8과 Oracle7 데이터베이스에 접근할 수 있도록 해준다. 이것은 Oracle8 Call-Interface (OCI8)를 사용한다. 이 드라이버를 사용하려면 Oracle8 client libraries가 필요하다.

이 드라이버는 보통의 PHP Ora_ 드라이버보다 더욱 유연하다. 이것은 PHP의 전역, 지역 변수들의 Oracle placeholder로의 binding을 지원하고, full LOB와 FILE, ROWID를 지원하며, user-supplied define variable을 사용할 수 있도록 해 준다.

이 드라이버를 사용하기 전에 오라클 유저와 웹서버 유저에게 유효한 오라클 환경변수를 적용했는지 확인해야한다. 적용시킬 환경변수:

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

웹서버 유저에게 환경변수를 적용한후에, 웹서버 유저(nobody, www)를 오라클 그룹에 추가했는지 확인해야 한다.

예 1. OCI Hints


<?php
// by sergo@bacup.ru

// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmt, OCI_DEFAULT);

// for retrieve data use (after fetch):

$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();

// For INSERT or UPDATE statement use:

$sql = "insert into table (field1, field2) values (field1 = 'value',
 field2 = empty_clob()) returning field2 into :field2";
OCIParse($conn, $sql);
$clob = OCINewDescriptor($conn, OCI_D_LOB);
OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save ("some text");

?>
     

command-line에서 내장 프로시저(stored procedures)를 쓰는것처럼 사용이 간편하다.

예 2. 내장 프로시저(Stored Procedures) 사용하기


<?php
// by webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;" );

// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable. 
// Then you do the binding:

   OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
   OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
   OCIExecute ( $sth );

?>
     

차례
OCIDefineByName --  SELECT 구문(Statement)을 사용하는 동안 정의단계(define-step)를 위한 PHP 변수를 할당한다.
OCIBindByName --  오라클 위치보유자(Placeholder)를 PHP 변수에 연계(bind)시킨다.
OCILogon -- 오라클 접속을 형성한다.
OCIPLogon -- 오라클 데이터베이스에 접속하고 영속적 DB 접속 (persistant connection) 을 이용해서 로그온한다. 또다른 새로운 세션(session)을 넘겨준다.
OCINLogon -- 오라클 데이터베이스에 접속하고 새로운 접속을 이용해서 로그온한다. 새로운 세션(session)을 넘겨준다.
OCILogOff -- 오라클로 부터 접속을 해제한다.
OCIExecute -- SQL 구문(Statement)을 수행한다.
OCICommit -- 미결정된 트랜잭션을 커밋시킨다.
OCIRollback -- 미결정된 트랜잭션을 롤백한다.
OCINewDescriptor --  LOB/FILE의 비어있는 새로운 descriptor를 초기화한다 (LOB 이 기본값이다)
OCIRowCount -- 적용되어진 열의 갯수를 가져온다
OCINumCols --  구문 결과값의 컬럼의 갯수를 리턴한다
OCIResult -- 페치된 열의 컬럼 값을 리턴한다
OCIFetch -- 결과 버퍼(result-buffer)로 다음 열을 페치한다
OCIFetchInto -- 결과 배열(result-array)에 다음 열을 페치한다
OCIFetchStatement -- 배열에 모든 열의 결과 값을 페치한다.
OCIColumnIsNULL -- 결과 컬럼이 널(NULL)인지 테스트한다
OCIColumnName -- 컬럼의 이름을 리턴한다.
OCIColumnSize -- 결과 컬럼 사이즈를 리턴한다
OCIColumnType -- 컬럼의 데이터 타입을 리턴한다.
OCIServerVersion -- 서버 버전 정보를 포함하는 문자열을 리턴한다
OCIStatementType -- OCI 구문(statement)의 타입을 리턴한다.
OCINewCursor --  Return a new cursor (Statement-Handle) - use to bind ref-cursors.
OCIFreeStatement --  구문(statement)에 연관된 모든 자원을 해제한다.
OCIFreeCursor --  커서(cursor)에 연관된 모든 자원을 해제한다.
OCIFreeDesc -- 큰 객체(large object) descriptor를 삭제한다.
OCIParse -- 질의(query)를 해석하고 구문(statement)를 리턴한다
OCIError -- stmt|conn|global의 제일 마지막 에러를 리턴한다. 아무 에러도 없었다면 FALSE를 리턴한다.
OCIInternalDebug --  내부 디버그 출력을 활성화 시키거나, 비활성화 시킨다. 기본값으로 비활성화 되어있다.