이번 강좌는 약속 했듯이 oci8 함수를 소개해 드리겠습니다.
우선 함수를 간략하게 소개해드리고 나중에는 이 함수들을 가지고 class로 구성해 보겠습니다.
1. string OCIServerVersion(int conn)
오라클 데이터 서버의 버전정보를 출력합니다.
oci8을 설정했을 경우, 가장 간단한 테스트 방법으로 많이 쓰입니다.
<?php
$conn = OCILogon("scott", "tiger", "orcl");
echo "Server Version : " . OCIServerVersion($conn);
$OCILogOff($conn);
?>
result :
Server Version : Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production
위와같이 오라클 서버정보가 나오면 오라클과 PHP가 잘 연동된 것 입니다.
모든 책의 기본인 "Hello World!"를 찍는 테스트용 소스라고 생각하시면 됩니다.
2. int OCILogon(string username, string password, strin[ORACLE_SID])
int OCILogoff(int connection)
PHP에서 오라클에 접속하고 접속을 해제하는 함수입니다.
이전에도 설명 했듯이 이부분은 간단하게 이해하시면 됩니다. 사용자가 인터넷에 연결할때 머가 필요하다고 했죠.
"초보탈출" 강좌 PHP와 오라클 연동 부분을 읽으신 분들은 아하! 라는 탄성이 나오실 것입니다.
OCILogon() 함수의 세번째 인수는 생략이 가능하며, 이를 생략할 경우에는 ORACLE_SID(Oracle instance) 또는 TWO_TASK(tnsames.ora) 환경변수 값을 이용해서 어떤 DB에 연결할지를 결정합니다.
리턴값으로는 다른 OCI함수를 호출할때 필요한 connection 값을 반환 합니다.
그럼 당연히 OCILogoff()함수은 무엇이겠습니까?
맞습니다. OCILogon()의 리턴값을 인수로 받아 오라클 접속을 해지하는 것 입니다.
3. intOCiParse(int conn, strint query)
"Parse" - <문장을> 해부[분석]하다. 이죠.
그럼 설명 할 필요 없겠죠.
그래도 자세히. 첫번째 인수로 OCILogon의 리턴 값을 받습니다. 두번째 인수로는 유효한 오라클 SQL 구문이 옵니다.
무엇을 분석하려고 할까요? 맞습니다. 바로 SQL 쿼리문입니다. 한마디로 유효성 검사라고 생각하시면 됩니다.
이를 우리는 statement 라고들 합니다. 명사로 풀이하면 "성명서"라고 하죠. "성명서"란 만인한테 인증된 사실이죠.
그럼 리턴값은 무엇일까요. 당근.... 참과 거짓. true나 false 입니다. 알고나니 쉽죠. 별것 아닙니다.
알수록 재미있죠. 그럼 기운을 내서 ...
4. int OCIExecute(int statement, int [mode])
"execute" 다 아시는 단어. 또 나왔습니다. "<행동 등을> 행하다, 실시[실행]하다 " 입니다. 그럼 머하는 함수일까요?
쉽습니다.^^ 바로 먼가를 실행하는 함수 입니다. 무엇을? 첫번째 인수가 statement 군요. "성명서" 기억나시죠.
즉, SQL문이 true 인것을 실행하는 것 입니다. 이해 팍팍 오죠.
그럼 두번째 인수는 멀까요? mode 내요. 두번째 인수는 생략할 수 있습니다. 생략을 하면 OCI_COMMIT_ON_SUCCESS 가 들어가죠.
이는 SQL문을 실행하고 바로 commit 을 하도록 하는 것입니다.
또다른 mode 로는 OCI_DEFAULT 를 지정할 수 있습니다. 그럼 이 옵션은 무엇일까요. commit을 바로 하지 않고 좀 생각할 여유를 줘서 아니다 싶으면 rollback을 할수 있게 해주는 옵션입니다.
OCI_DEFAULT는 테이블을 변경하는 작업(CREATE, UPDATE, DELETE)에서 많이 사용하죠. 여기서 설명한 부분 상당히 중요합니다.
commit과 rollback은 "트랜젝션"에 관한 것으로 DB 관련 용어입니다. 중요한 단어 아시겠죠. 바로 "트랜젝션" 입니다.
"트랜젝션"은 너무너무 중요함으로 다음 강의에서 설명드리겠습니다.
5. int OCIFreeStatement(int stmt)
FreeStatement가 무엇을 의미할까요. Free "(속박이 없이) 자유로운" Statement는 머였죠? "성명서".
즉, 이젠 더이상 쿼리문을 사용하지 않는다는 것입니다. 그럼, 이를 오라클이 알기 위해서는 동의가 필요하겠죠.
그래서 리턴 값이 true, false 를 가집니다.
그럼 지금까지 강의를 간단한 소스와 함께 간단히 글로 풀어보겠습니다.^^
<?php
/**
* 오라클 접속 id: scott 과 pwd: tiger 을 이용해서 tnsnames에 있는 주소 orcl에 들어갔습니다.
* 리턴값 true를 받아 사용가능하게 되었습니다.
*/
$conn = OCILogon("scott", "tiger", "orcl");
/**
* 오라클을 사용해도 된다고 해서 자신의 이름의 이니셜로된 테이블을 만들려고 쿼리문을 보냈습니다.
* 오라클은 쿼리문을 보고 유효성 검사를 하여 "성명서"를 발표합니다.
*/
$query = "create table jmc(name varchar2(10))";
$stmt = OCIparse($conn, $query);
/**
* 오라클은 scott 이라는 사용자가 준 쿼리를 실행합니다.
* jmc 라는 테이블이 name 이라는 칼럼을 가지고 생성되었습니다.
* 오라클은 생성했다고 알리기 위해서 true 를 리턴했습니다.
* 그래서 if문만나 echo 값이 찍힙니다.
*/
if(OCIexecute($stmt))
{
echo "jmc 라는 테이블이 생성되었습니다.";
}
/**
* 이젠 더이상 필요없는 "성명서"를 거두어 드립니다.
*/
OCIFreeStatement($stmt);
/**
* scott 이라는 사용자가 오라클에서 나갑니다. 나갈때는 당연히 로그아웃하고 나가죠^^
*/
OCILogoff($conn);
?>
이 예제의 이야기를 보셨죠. 두번 실행하면 당연히 error 납니다. 왜 일까요?
같은 이름의 jmc라는 테이블을 또 생성하려고 하니깐 그렇겠죠^^
그럼 이 이야기를 머리속에 정리하시면서 생성된 jmc 테이블을 drop 해보세요.
그럼 다음 강좌에는 오라클에서 select 로 데이터를 배열로 받아서 화면에 뿌려보겠습니다.
아차~ 다음번 강의는 트랜젝션이죠^^
오라클 이야기를 다른사람한테 해줄 수 있는 당신은 절대 "초보"가 아닙니다.
댓글 없음:
댓글 쓰기