날짜: 1996-05-03 | 글쓴이: 도아 | 16236 번 | 프린트 | 메일로보내기

펄 응용 - 제 3강 ODBC 개체 - 계속


개체 메소드 일반적 주의 모든 메소드는
	
use Win32::ODBC;
와 같은 행이 메소드를 호출하기전 어디엔가 반드시 존재해야하며 $db라고 부르는 ODBC 개체를 가지고 있는 것으로 가정한다. $db는 다음과 비슷하게 사용된다:
	
$db = new Win32::ODBC("MyDSN");
추가적인 정보는new를 본다. 또한 예를 간단히기위해 리턴 값에대한 어떠한 오류검사도 수행되지 않았다. 예들은 단지 예시를 위한 것이다. 실제 코딩을 할때에는 항상 오류 조건을 검사해야 한다. 경고: 예제 코드들을 시험하지 않았다. 메소드
Catalog qualifier, owner, name, type
현 ODBC 개체를 카달로그로부터 복구한다. 네개의 값을 갖는 배열(Qualifier, Owner, Name, Type)을 리턴한다. 주의:모든 필드명은 대문자이다. 예:
	($qualifier, $owner, $name, $type) = $db->Catalog("", "", "%", "'TABLE'");
Connection
개체의 ODBC 접속 수를 리턴한다. 예:
$cnum = $db->Connection;
Close
이 개체에대한 ODBC 접속을 닫는다. 항상 undef을 리턴한다. 예:
$db->Close();
Data
Data list
필드명의 목록에대해 이전에 가저온 데이타를 복구한다. 스칼라로 받을 경우 이 것은 함께 결합된 모든 필드 값을 리턴한다. 배열로 받을 경우 값이 정의된 순서로 값의 배열이 리턴된다. 필드명을 주지않으면 정의되지 않은 순서로 모든 필드가 리턴된다. 예:
$db->Sql("SELECT f1, f2, f3 FROM foo");
$db->FetchRow();
($f1, $f2) = $db->Data("f1", "f2");

또는

$db->Sql("SELECT * FROM foo");
$db->FetchRow();
@values = $db->Data;
또한: DataHash
DataHash
DataHash list
필드명으로 목록에대해 이전에 가져온 데이타를 복구한다. 필드명이 키인 연관배열을 리턴한다. 필드명이 주어지지않으면 모든 필드가 리턴된다. 예:
$db->Sql("SELECT f1, f2, f3 FROM foo");
$db->FetchRow();
%hash = $db->DataHash("f1", "f2");
print $hash{f1};

또는

$db->Sql("SELECT * FROM foo");
$db->FetchRow();
%hash = $db->DataHash;
foreach $key (sort(keys %hash)) {
	print $key, '=', $hash{$key}, "
";
}
또한: Data
DataSources
다음과 같은 형태로 데이타 소스와 ODBC 정보에대한 연관배열을 리턴한다.
$ArrayName{'DSN'} = Remark
여기서 DSN은 Data Source Name이며 Remark는 정보이다. 예:
%rem = $db->DataSources;
print LOG qq(Current DSN's Remark: "), %rem{$db->GetDSN}, qq("
);
Drivers
다음과 같은 형태로 드라이버와 드라이버 속성에대한 연관배열를 리턴한다.
$ArrayName{'DRIVER'} = Attrib1;Attrib2;Attrib3;...
여기서 DRIVER는 ODBC 드라이버의 이름이고 AttribX는 드라이버에 정의된 속성이다. 예:
%attrib = $db->Drivers;
print LOG qq($driver: $attrib{$driver}
) 
	foreach $driver (keys %attrib);
DumpError
마지막 오류조건에대한 자세한 사항을 덤프한다. 이 것은 오류 번호, 오류 문장과 오류를 발생한 ODBC 접속 수를 포함한다. 이 것은 주로 디버깅에 사용된다. 예:
$db = new Win32::ODBC("My DSN");
if (undef $db){
    Win32::ODBC::DumpError();
}
if ($db->Sql("Select * FROM foo")){
    $db->DumpError;
}
DumpData
현재의 데이타집합의 모든 행내에 존재하는 필드명과 데이타를 덤프한다. 이 것은 주로 디버깅에 사용된다. 예:
$db->Sql("Select * FROM foo");
$db->DumpData;
Error
마지막으로 기록된 오류를 배열이나 스칼라 형태로 리턴한다(환경에따라). 여기에는 오류번호, 오류 문장과 오류를 발생한 ODBC 접속을 포함한다. 예:
die $db->Error(), qq(
);

($ErrNum, $ErrText, $ErrConn) = $db->Error();
FetchRow
이전에 정의한 SQL문으로부터 다음행의 데이타를 가져온다. 또한 DataDataHash을 호출, 데이타 각각의 요소를 실제적으로 복원할 수 있다. 오류가 발생한 경우 undef를 리턴하며, 그렇지않은 경우, TRUE를 리턴한다. 예:
$db->Sql("SELECT * FROM foo");
$db->FetchRow() || die qq(Fetch error: ), $db->Error(), qq(
);
$f1 = $db->Data("f1");
또한: Sql, Data, DataHash
FieldNames
현재의 데이타집합에서 추출된 필드명의 목록을 리턴한다. 이것은 주로 시험/디버깅에 사용된다. FieldNames은 배열로 데이타를 리턴하며 필드명의 순서는 보장되지않는다. 예:
$db->Sql("SELECT * FROM foo");
$db->FetchRow();
foreach $fd ($db->FieldNames()) 
	print qq($fd: "), $db->Data($fd), qq("
);
GetConnections
모든 개체에대한 접속수를 배열로 리턴한다. 예:
@cnums = $db->GetConnections;
GetDSN
GetDSN conn
conn이나 현재 접속(정의되지 않은 경우)에대한 DSN(Data Source Name)이나 ODBCDriverConnect 문자열을 리턴한다. 예:
print LOG qq(Current connection: "), $db->GetDSN, qq("
);
GetMaxBufSize
현재 가장 큰 필드 데이타의 크기를 바이트로 리턴한다. 예:
$max = $db->GetMaxBufSize;
$db->SetMaxBufSize($needed) if ($max < $needed);
또한: SetMaxBufSize
GetStmtCloseType
현재 ODBC의 닫기 형식을 리턴한다. 이것은 주로 디버깅에 사용된다. 닫기 형식은 SQL_CLOSE, SQL_DROP, SQL_UNBIND나 SQL_RESET_PARAMS 중 하나이다. 각 형식이 의미하는 바와 어떻게 사용하는 가는 SetStmtCloseType를 본다. 예:
$oldct = $db->GetStmtCloseType;
$db->SetStmtCloseType(SQL_DROP);
...
$db->SetStmtCloseType($oldct);
또한: SetStmtCloseType
MoreResults
더많은 결과 집합이 존재하는가를 조사하고 다음 결과 집합으로부터 행을 가져오기위해 초기화한다. 그리고 FetchRow을 호출, 다음 결과집합의 다음 행을 실제로 가져온다. 오류가 발생하면 undef를 리턴하며, 그러치않으면 TRUE를 리턴한다. 예:
$db->Sql("SELECT * FROM foo
  SELECT * FROM bar");
$db->FetchRow() || die qq(Fetch error: ), $db->Error(), qq(
);
$f1 = $db->Data("f1");
$db->MoreResults() || die qq(Error checking for more result sets: ), 
		$db->Error(), qq(
);
$db->FetchRow() || die qq(Fetch error: ), $db->Error(), qq(
);
$f1 = $db->Data("f1");
또한: Sql, Data
new Win32::ODBC(DSN)
new Win32::ODBC(ODBCDriverConnect)
DSN(Data Source Name)이나 적당히 형식화된 ODBCDriverConnect 문자열을 주면 새로운 ODBC 개체를 생성한다. 생성된 ODBC 개체를 리턴하며 오류가 있는 경우 undef을 리턴한다. 예:
$DSN = "MyDSN";
$db = new Win32::ODBC($DSN);
die qq(Cannot open new ODBC
) if ! $db;

또는

$db = new Win32::ODBC("dsn=FOO;UID=BAR;PWD=FUBAR");
die qq(Cannot open new ODBC
) if ! $db;
RowCount
이전 SQL 명령이 영향을 미친 행의 수를 리턴한다. 주의: 이 것은 모든 ODBC 접속에대해 동작하지는 않는다. 예:
$db->Sql("SELECT * FROM foo");
print DBG q(# of records: ), $db->RowCount(), qq(
);
Run stmt
SQL 문, stmt를 제출하고 이것에대한 데이타를 출력한다. 이것은 단지 디버깅에서만 사용된다. 예:
$db->Run("SELECT * FROM foo");
또한: Sql
SetMaxBufSize size
FetchRow를 수행할 때 단일 필드에 할당될 수 있는 최대 버퍼의 크기를 설정한다. 기본값은 10240 바이트이며, 최대값은 2147483647이다. 최대값은 모듈을 컴파일함으로서 다시 설정할 수 있다. 성공적이면 undef를 리턴한다. 예:
$newsize = 20480;
$rc = $db->SetMaxBufSize($newsize);
die qq(SetMaxBufSize($newsize) error: ), $db->Error, qq(
) if ! $rc;
또한: GetMaxBufSize
SetStmtCloseType type
ODBC 관리자에의해 사용된 현재 ODBC의 닫기 형식을 설정한다. 이것은 주로 디버깅에 사용된다. 보통 스테이트먼트 핸들을 열고 질의(또는 아무거나)를 수행할 때 결과는 스테이트먼트와 연관이있다. 다른 질의를 수행하기위해 이 스테이트먼트를 삭제(Free)할 필요가 있다. 이것을 할때 보통 데이타베이스(질의로부터)가 캐쉬된다. 이러한 캐쉬동작은 속도면에서 잇점이있지만 데이타 베이스가 커질 경우 메모리 문제를 일으킬 수 있다. 보다 자세한 것은 ODBC API 호출 SQLFreeStmt(hstmt, 옵션)을 본다(이러한 모든 것은 Win32::ODBC에서 자동적으로 처리한다). 닫기 형식은 다음중 하나이다:
  • SQL_CLOSE - 바로 스테이트먼트를 닫는다(캐쉬를 사용)
  • SQL_DROP - 닫고 모든 결과를 버린다(캐쉬를 사용하지 않음)
  • SQL_UNBIND - 닫고 열과의 바인딩을 제거한다(odbc.pll은 열과 변수를 바인드하지못한다)
  • SQL_RESET_PARAMS - 닫고 모든 바운드 변수를 다시 설정한다(열에대한 형식과 같은; SQLFreeStmt()을 본다)
예:
$oldct = $db->GetStmtCloseType;
$db->SetStmtCloseType(SQL_DROP);
...
$db->SetStmtCloseType($oldct);
또한: GetStmtCloseType
ShutDown
ODBC 접속을 닫고 이것에대한 데이타를 출력한다. 이것은 단지 디버깅에만 사용된다. 예:
$db->Shutdown;
또한: Close
Sql stmt
SQL 명령 stmt을 수행한다. 성공하면 undef을 리턴하며, 실패하면 SQL 오류 코드를 리턴한다. 예:
$stmt = "SELECT * FROM foo";
$rc = $db->Sql($stmt);
die qq(SQL failed "$stmt": ), $db->Error(), qq(
) if $rc;
또한: Error
TableList
TableList qualifier, owner, name, type
Catalog를 사용한 현재 ODBC 개체로부터 테이블 이름의 목록을 복구한다. 만약 변수가 정의되지 않으면, qualifierowner는 ""가 기본값이며, name은 "%"이 기본값이고 table은 "'TABLE'"이 기본값이다. TableList는 테이블명을 요소로하는 배열을 리턴한다. 주의: 모든 필드명은 대문자이다. 예:
@tables = $db->TableList;
또한: Catalog


다음글: 펄 응용 - 제 4강 Win32::Internet 목차 (6954)1996-05-04
이전글: 펄 응용 - 제 2강 ODBC 모듈 (24815)1996-05-02
<< 이전페이지 (2/3)

세상사는 이야기



RSS 구독 (익명 | 회원 | 강좌 | 포럼)
(C) 1996 ~ 2017 QAOS.com All rights reserved.