|
ÆÞ ÀÀ¿ë - Á¦ 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¹®À¸·ÎºÎÅÍ ´ÙÀ½ÇàÀÇ µ¥ÀÌŸ¸¦ °¡Á®¿Â´Ù. ¶ÇÇÑ Data³ª DataHashÀ» È£Ãâ, µ¥ÀÌŸ °¢°¢ÀÇ ¿ä¼Ò¸¦ ½ÇÁ¦ÀûÀ¸·Î º¹¿øÇÒ ¼ö ÀÖ´Ù. ¿À·ù°¡ ¹ß»ýÇÑ °æ¿ì 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)ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ°ÍÀ» ÇÒ¶§ º¸Åë µ¥ÀÌŸº£À̽º(ÁúÀǷκÎÅÍ)°¡ ij½¬µÈ´Ù. ÀÌ·¯ÇÑ Ä³½¬µ¿ÀÛÀº ¼Óµµ¸é¿¡¼ ÀÕÁ¡ÀÌÀÖÁö¸¸ µ¥ÀÌŸ º£À̽º°¡ Ä¿Áú °æ¿ì ¸Þ¸ð¸® ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. º¸´Ù ÀÚ¼¼ÇÑ °ÍÀº ODBC API È£Ãâ SQLFreeStmt(hstmt, ¿É¼Ç)À» º»´Ù(ÀÌ·¯ÇÑ ¸ðµç °ÍÀº Win32::ODBC¿¡¼ ÀÚµ¿ÀûÀ¸·Î ó¸®ÇÑ´Ù).
´Ý±â Çü½ÄÀº ´ÙÀ½Áß ÇϳªÀÌ´Ù:
- SQL_CLOSE - ¹Ù·Î ½ºÅ×ÀÌÆ®¸ÕÆ®¸¦ ´Ý´Â´Ù(ij½¬¸¦ »ç¿ë)
- SQL_DROP - ´Ý°í ¸ðµç °á°ú¸¦ ¹ö¸°´Ù(ij½¬¸¦ »ç¿ëÇÏÁö ¾ÊÀ½)
- 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 °³Ã¼·ÎºÎÅÍ Å×À̺í À̸§ÀÇ ¸ñ·ÏÀ» º¹±¸ÇÑ´Ù. ¸¸¾à º¯¼ö°¡ Á¤ÀǵÇÁö ¾ÊÀ¸¸é, qualifier°ú owner´Â ""°¡ ±âº»°ªÀ̸ç, nameÀº "%"ÀÌ ±âº»°ªÀÌ°í tableÀº "'TABLE'"ÀÌ ±âº»°ªÀÌ´Ù. TableList´Â Å×À̺í¸íÀ» ¿ä¼Ò·ÎÇÏ´Â ¹è¿À» ¸®ÅÏÇÑ´Ù. ÁÖÀÇ: ¸ðµç Çʵå¸íÀº ´ë¹®ÀÚÀÌ´Ù.
¿¹:
@tables = $db->TableList;
¶ÇÇÑ: Catalog
| | |
|