lang/php

php oracle 관련함수

C/H 2008. 9. 2. 14:50


OCIColumnIsNULL

  • 결과 컬럼이 널(NULL)인지 테스트한다
  • int OCIColumnIsNULL (int stmt, mixed column)
  • OCIColumnIsNULL()함수는 구문 stmt의 결과값에서 리턴된 컬럼 column 값이 널(NULL)이 면 true를 리턴한다. col 인수를 위해 컬럼 숫자(column-number(1-Based))나 컬럼 이름 (column-name)을 사용할 수 있다


OCIColumnName

  • 컬럼의 이름을 리턴한다.
  • string OCIColumnName (int stmt, int col)
  • OCIColumnName() 함수는 컬럼 숫자(1-based)에 부합되는 컬럼 이름을 리턴한다.
print "<pre>"; 
$conn = OCILogon("scott", "tiger"); 
$stmt = OCIParse($conn,"select * from emp"); 
OCIExecute($stmt); 
$ncols = OCINumCols($stmt); 
for ( $i = 1; $i <= $ncols; $i++ ) { 
	$column_name = OCIColumnName($stmt,$i); 
	$column_type = OCIColumnType($stmt,$i); 
	$column_size = OCIColumnSize($stmt,$i); 
} 
OCIFreeStatement($stmt); 
OCILogoff($conn); 


OCIColumnSize

  • 결과 컬럼 사이즈를 리턴한다
  • int OCIColumnSize (int stmt, mixed column)
  • OCIColumnSize()함수는 오라클에 의해 주어진 컬럼의 사이즈를 리턴한다. col 인수에는 컬럼 숫자(column-number (1-Based))나 컬럼 이름을 사용할 수 있다.


OCIColumnType

  • 컬럼의 데이터 타입을 리턴한다.
  • mixed OCIColumnType (int stmt, int col)
  • OCIColumnType()함수는 컬럼 숫자(1-based)에 부합되는 컬럼의 데이터 타입을 리턴한다 .


OCICommit

  • 미결정된 트랜잭션을 커밋시킨다.
  • int OCICommit (int connection)
  • OCICommit() 오라클 접속 파라미터 connection에 대해서 미결정된 모든 구문(outstand ing statements)을 커밋한다.


OCIError

  • 마지막에 발생한 에러에 대한 정보를 얻는다.
  • array OCIError ([int stmt|conn|global])
  • 주어진 stmt, conn, global에서 마지막에 발생한 에러 메시지를 반환한다. 에러가 없으 면 False를 반환한다. 인수가 주어지지 않으면 가장 마지막에 발생한 에러 메시지가 반환된다. 반환되는 에러는 에러코드와 에러메시지로 이루어진 연관배열의 형태이다.


OCIExecute

  • Statement를 실행한다.
  • int OCIExecute (int statement [, int mode])
  • OCIExecute()함수는 OCIParse()함수에 의해 분석된 쿼리를 실행한다. 두 번째 인수가 생략되면 기본값은 OCI_COMMENT_ON_SUCCESS로 쿼리를 실행한다. 자동으 로 커밋을 하길 원하지 않는다면 mode를 OCI_DEFAULT로 지정해주어야 한다.

OCIFetch

  • 결과 버퍼(result-buffer)로 다음 열을 페치한다
  • int OCIFetch (int statement)
  • OCIFetch()함수는 다음 열(SELECT 구문을 위해)을 내부 결과 버퍼(internal result-bu ffer)에 페치한다.

OCIFetchInto

  • 결과 배열(result-array)에 다음 열을 페치한다
  • int OCIFetchInto (int stmt, array &result [, int mode])
  • OCIFetchInto()함수는 다음열(SELECT 구문을 위해)을 result배열에 페치한다. OCIFetc hInto()함수는 result 변수의 이전값을 덮어 쓸것이다. 기본적으로 result변수는 NULL 이 아닌 모든 컬럼의 일차원 배열을 포함할것이다.
  • mode인수는 이 함수의 기본값을 변화시킨다. 한개 이상의 플래그를 추가할수있다(OCI_ ASSOC+OCI_RETURN_NULLS와 같이). 알려진 플래그는 다음과 같다.
    • OCI_ASSOC 연관배열(associative array)을 리턴한다.
    • OCI_NUM 1부터 시작하는 숫자를 갖는 변수를 리턴한다. (디폴트)
    • OCI_RETURN_NULLS 빈 컬럼을 리턴한다.
    • OCI_RETURN_LOBSdescriptor 대신에 LOB의 값을 리턴한다

OCIFetchStatement

  • 배열에 모든 열의 결과 값을 페치한다.
  • int OCIFetchStatement (int stmt, array &variable)
  • OCIFetchStatement()함수는 사용자 정의 배열로 결과값의 모든 열을 페치한다. OCIFet chStatement()함수는 페치된 열의 갯수를 리턴한다.
/* OCIFetchStatement example mbritton@verinet.com (990624) */ 
$conn = OCILogon("scott","tiger"); 
$stmt = OCIParse($conn,"select * from emp"); 
OCIExecute($stmt); 

$nrows = OCIFetchStatement($stmt,$results); 
if ( $nrows > 0 ) { 
	print "<TABLE BORDER='1'>"; 
	print "<TR>"; 
	while ( list( $key, $val ) = each( $results ) ) { 
		print "<TH>$key"; 
	} 
	print "</TR>"; 
	for ( $i = 0; $i < $nrows; $i++ ) { 
		reset($results); 
		print "<TR>"; 
		while ( $column = each($results) ) { 
			$data = $column['value']; 
			print "<TD>$data[$i]"; 
		} 
		print "</TR>"; 
	} 
	print "</TABLE>"; 
} else { 
	echo "No data found
"; } print "$nrows Records Selected
"; OCIFreeStatement($stmt); OCILogoff($conn);

OCILogOff

  • 오라클과의 연결을 종료한다.
  • int OCILogOff (int connection)
  • 주어진 connection과 연결된 오라클 접속을 종료한다.

OCILogon

  • 오라클과의 연결을 설정한다.
  • int OCILogon (string username, string password [, string db])
  • OCILogon()함수는 다은 OCI를 호출하는데 필요한 연결 식별자를 반환한다. 세 번째 인수로는 로컬 오라클 인스턴스 이름이나 접속 가능한 tnsnames.ora의 접속명 을 명시해주면 된다. 원격 DB서버와의 접속도 가능하다. 세 번째 인수를 생략할 경우, ORACLE_SID(Oracle instance) 또는 TWO_TASK(tnsnames.o ra) 환경변수의 값을 사용하여 어떤 DB에 접속할 것인지 결정한다.
print "<pre>"; 
$db = ""; 

$c1 = ocilogon("scott","tiger",$db); 
$c2 = ocilogon("scott","tiger",$db); 

function create_table($conn) {
	 $stmt = ociparse($conn,"create table scott.hallo (test varchar2(64))" ;); 
	ociexecute($stmt); 
	echo $conn." created tablen"; 
} 

function drop_table($conn) {
	 $stmt = ociparse($conn,"drop table scott.hallo");
	ociexecute($stmt); 
	echo $conn." dropped tablen"; 
} 

function insert_data($conn) {
	 $stmt = ociparse($conn,"insert into scott.hallo 
	values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))&qu ot;); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn." inserted hallon"; 
} 

function delete_data($conn) {
	$stmt = ociparse($conn,"delete from scott.hallo"); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn." deleted hallon"; 
} 

function commit($conn) { 
	ocicommit($conn); 
	echo $conn." committedn"; 
} 

function rollback($conn) {
	ocirollback($conn); 
	echo $conn." rollbackn"; 
} 

function select_data($conn) {
	$stmt = ociparse($conn,"select * from scott.hallo"); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn."----selectingn"; 
	while (ocifetch($stmt)) 
		echo $conn." <".ociresult($stmt,"TEST").">nn& quot;; 
	echo $conn."----donen"; 
} 

create_table($c1); 
insert_data($c1); // Insert a row using c1 
insert_data($c2); // Insert a row using c2 

select_data($c1); // Results of both inserts are returned 
select_data($c2); 

rollback($c1); // Rollback using c1 

select_data($c1); // Both inserts have been rolled back 
select_data($c2); 

insert_data($c2); // Insert a row using c2 
commit($c2); // commit using c2 

select_data($c1); // result of c2 insert is returned 

delete_data($c1); // delete all rows in table using c1 
select_data($c1); // no rows returned 
select_data($c2); // no rows returned 
commit($c1); // commit using c1 

select_data($c1); // no rows returned 
select_data($c2); // no rows returned 

drop_table($c1); 
print "</pre>"; 

OCINLogon

  • 오라클 데이터베이스에 접속하고 새로운 접속을 이용해서 로그온한다. 새로운 세션(session)을 넘겨준다.
  • int OCINLogon (string username, string password [, string db])
  • OCINLogon() 오라클8 DB에 새로운 접속을 형성하고, 로그온 한다. 세번째 인수는 로컬 오라클 인스턴스(local Oracle instanace)의 이름, 또는 tnsnames.ora설정파일의 엔트 리(entry) 이름이 될수 있다. 세번째 인수가 생략되면, PHP는 접속할 오라클 데이터베 이스를 결정하기 위해 환경변수 ORACLE_SID (Oracle instance)나 TWO_TASK(tnsnames.o ra)를 이용한다.
  • OCINLogon()함수는 새로운 접속을 강제로 형성한다. 각 트랜잭션들을 분리할 필요가 있 을때 사용해야 할것이다. 기본적으로, OCILogon()함수를 사용하면 접속은 페이지 레벨 에서 분배되어지고, OCIPLogon()함수는 웹서버 프로세스 레벨에서 분배되어진다. OCIN Logon()함수로 두개 이상의 접속을 연다면, 모든 커밋(commits)과 롤백(rollbacks)은 특정 접속에만 적용되어진다.
// This example demonstrates how the connections are separated. 
print "<pre>"; 
$db = ""; 

$c1 = ocilogon("scott","tiger",$db); 
$c2 = ocinlogon("scott","tiger",$db); 

function create_table($conn) {
	$stmt = ociparse($conn,"create table scott.hallo (test 
	varchar2(64))"); 
	ociexecute($stmt); 
	echo $conn." created tablen"; 
} 

function drop_table($conn) { 
	$stmt = ociparse($conn,"drop table scott.hallo");
	ociexecute($stmt); 
	echo $conn." dropped tablen"; 
} 

function insert_data($conn){
	$stmt = ociparse($conn,"insert into scott.hallo 
	values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))&qu ot;); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn." inserted hallon"; 
} 

function delete_data($conn){ 
	$stmt = ociparse($conn,"delete from scott.hallo"); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn." deleted hallon"; 
} 

function commit($conn) {
	ocicommit($conn); 
	echo $conn." committedn"; 
} 

function rollback($conn) {
	ocirollback($conn); 
	echo $conn." rollbackn"; 
} 

function select_data($conn){
	$stmt = ociparse($conn,"select * from scott.hallo"); 
	ociexecute($stmt,OCI_DEFAULT); 
	echo $conn."----selectingn"; 
	while (ocifetch($stmt)) 
		echo $conn." <".ociresult($stmt,"TEST").">nn& quot;; 
	echo $conn."----donen"; 
} 

create_table($c1); 
insert_data($c1); 
select_data($c1); 
select_data($c2); 

rollback($c1); 

select_data($c1); 
select_data($c2); 

insert_data($c2); 
commit($c2); 

select_data($c1); 

delete_data($c1); 
select_data($c1); 
select_data($c2); 
commit($c1); 

select_data($c1); 
select_data($c2); 

drop_table($c1); 
print "</pre>"; 

OCINumCols

  • 구문 결과값의 컬럼의 갯수를 리턴한다
  • int OCINumCols (int stmt)
  • OCINumCols()함수는 구문에서 컬럼의 갯수를 리턴한다.
print "<pre>"; 
$conn = OCILogon("scott", "tiger"); 
$stmt = OCIParse($conn,"select * from emp"); 
OCIExecute($stmt); 

while ( OCIFetch($stmt) ) { 
	$ncols = OCINumCols($stmt); 
	for ( $i = 1; $i <= $ncols; $i++ ) { 
		$column_name = OCIColumnName($stmt,$i); 
		$column_value = OCIResult($stmt,$i); 
		print $column_name . ': ' . $column_value . ""; 
	} 
} 
OCIFreeStatement($stmt); 
OCILogoff($conn); 
print "</pre>"; 

OCIParse

  • 쿼리문을 분석한다.
  • int OCIParse (int conn, strint query)
  • 주어진 연결을 이용하여 쿼리문을 분석한다.
    주어진 쿼리문이 유효하면 statement 식별자를, 그렇지않으면 False를 반환한다.
    OCIExecute를 실행하기전에 이 함수를 사용하여야 한다.

$stmt = OCIParse($conn,$query); 
OCIExecute($stmt,OCI_DEFAULT);

OCIPLogon

  • 오라클 데이터베이스에 접속하고 영속적 DB 접속 (persistant connection) 을 이용해서 로그온한다.
  • int OCIPLogon (string username, string password [, string db])
  • OCIPLogon() 오라클8 DB에 영속적인 접속을 형성하고, 로그온 한다. 세번째 인수는 로 컬 오라클 인스턴스(local Oracle instanace)의 이름, 또는 tnsnames.ora설정파일의 엔 트리(entry) 이름이 될수 있다. 세번째 인수가 생략되면, PHP는 접속할 오라클 데이터 베이스를 결정하기 위해 환경변수 ORACLE_SID (Oracle instance)나 TWO_TASK(tnsnames .ora)를 이용한다.

OCIResult

  • 페치된 열의 컬럼 값을 리턴한다
  • mixed OCIResult (int statement, mixed column)
  • OCIResult()함수는 현재 열의 컬럼 column에 대한 데이터를 리턴한다 (OCIFetch()함수 를 보라). OCIResult()함수는 추상형데이터타입(ROWID, LOB, FILE)을 제외한 문자열같 은 모든 것을 리턴할 것이다.

OCIRollback

  • 미결정된 트랜잭션을 롤백한다.
  • int OCIRollback (int connection)
  • OCIRollback() 오라클 접속 파라미터 connection에 대해서 미결정된 모든 구문(outsta nding statements)을 롤백 처리한다

OCIRowCount

  • 적용되어진 열의 갯수를 가져온다
  • int OCIRowCount (int statement)
  • OCIRowCount()함수는 update같은 구문에 의해 적용되어진 열의 갯수를 리턴한다. 이 함 수는 select 가 리턴할 열의 갯수를 말해 주진 않을 것이다!
print "<pre>"; 
$conn = OCILogon("scott","tiger"); 
$stmt = OCIParse($conn,"create table emp2 as select * from emp"); 

OCIExecute($stmt); 
print OCIRowCount($stmt) . " rows inserted.
"; OCIFreeStatement($stmt); $stmt = OCIParse($conn,"delete from emp2"); OCIExecute($stmt); print OCIRowCount($stmt) . " rows deleted.
"; OCICommit($conn); OCIFreeStatement($stmt); $stmt = OCIParse($conn,"drop table emp2"); OCIExecute($stmt); OCIFreeStatement($stmt); OCILogOff($conn); print "</pre>";

OCIServerVersion

  • 오라클 서버의 버전 정보를 출력한다.
  • string OCIServerVersion (int conn)
  • 연결된 오라클 서버의 버전 정보를 문자열로 반환한다.
$conn = OCILogon("scott","tiger"); 
print "Server Version: " . OCIServerVersion($conn); 
OCILogOff($conn); 

OCIStatementType

  • OCI 구문(statement)의 타입을 리턴한다.
  • string OCIStatementType (int stmt)
  • OCIStatementType() 함수는 다음중 하나를 리턴한다:
    • SELECT
    • UPDATE
    • DELETE"
    • INSERT
    • CREATE
    • DROP
    • ALTER
    • BEGIN
    • DECLARE
    • UNKNOWN
print "<pre>"; 
$conn = OCILogon("scott","tiger"); 
$sql = "delete from emp where deptno = 10"; 

$stmt = OCIParse($conn,$sql); 
if ( OCIStatementType($stmt) == "DELETE" ) { 
	die "You are not allowed to delete from this table
"; } OCILogoff($conn); print "</pre>";




반응형

'lang > php' 카테고리의 다른 글

PHP 성능튜닝 IF & Switch 문법  (0) 2010.01.28
PHP 코드 최적화 40가지팁(번역)  (0) 2009.10.23
PHP코딩 최적화  (0) 2007.12.12
phpOracleAdmin 0.1.3 - 상당부분 한글화 에러수정  (0) 2007.01.06
오라클/PHP 환경의 확장  (0) 2006.11.16