ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. Large Objects
ÀÌÁ¦ºÎÅÍ´Â LOB¿¡ ´ëÇØ¼ ¾Ë¾Æº¼ °ÍÀÌ´Ù. LOB¶õ À§¿¡¼ º¸´Â Á¦¸ñ ±×´ë·Î Large ObjectÀÌ´Ù. À̸§¿¡ °É¸Â°Ô ÀúÀåÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ¾ç ¶ÇÇÑ ´ë´ÜÇÏ´Ù. ¹«·Á 4±â°¡³ª µÈ´Ù. ½ÇÁ¦·Î ÇϳªÀÇ Ä®·³¿¡ À̸¸Å°¡ ¾²ÀÏ ÀÏÀº °ÅÀÇ ¾øÁö¸¸ ¿©ÇÏÆ° ´ë´ÜÇÑ ¿ë·®À̶ó ÇÒ ¼ö ÀÖ´Ù. À§¿¡¼ º¸´Â Á¦¸ñ´ë·Î LOBÀÇ ±âº»ÀûÀÎ ³»¿ëµé¿¡ ´ëÇØ¼ »ìÆìº¸ÀÚ. LOB¶õ ¹«¾ùÀΰ¡?
°á·ÐºÎÅÍ ¸»ÇÏÀÚ¸é LOBµµ ÇϳªÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ùº¸¸é ¶Ç´Â µ¥ÀÌÅͺ£À̽º¸¦ Á¤¸®ÇÏ´Ùº¸¸é Å×À̺í Ä®·³¾È¿¡¼ ´ë¿ë·®ÀÇ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ Çʿ伺ÀÌ ÀÖÀ» °æ¿ì°¡ ÀÖ´Ù. ÀÌ·Ä °æ¿ì LOB¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. µ¥ÀÌÅÍ´Â ÀÏ¹Ý ÅØ½ºÆ®°¡ µÉ¼öµµ ÀÖ°í ¹ÙÀ̳ʸ® µ¥ÀÌÅͰ¡ µÉ ¼öµµ ÀÖ´Ù. µ¥ÀÌÅÍÀÇ Æ¯¼º»ó »ç¿ëÇÏ´Â ºóµµ°¡ ³·°í ÀϹÝÀûÀÎ ¼ýÀÚ³ª ¹®ÀÚŸÀÔº¸´Ù ´Ù·ç±â°¡ Á»´õ ¾î·Á¿ï »ÓÀÌ´Ù. Á» ´õ µÚ¿¡¼ º¸°ÚÁö¸¸ »ç½Ç ±×¸® ¾î·ÆÁö´Â ¾Ê´Ù. LOB¿¡´Â ¾î¶² °ÍµéÀÌ Àִ°¡?
Å©°Ô ³ª´©ÀÚ¸é Internal°ú External µÎ°¡Áö·Î ³ª´©´Âµ¥ ÀÌ µÎ°¡Áö´Â »ç½Ç DBÀÇ ÀÔÀå¿¡¼ º¼ ¶§ ¾îµð¿¡ ÀúÀåÀÌ µÇ´Â°¡¸¦ ±âÁØÀ¸·Î ±¸ºÐÇÑ °ÍÀÌ´Ù. °³¹ßÀÚÀÇ ÀÔÀå¿¡¼ º¸ÀÚ¸é ÀúÀåµÇ´Â Àå¼Òº¸´Ù´Â µ¥ÀÌÅÍÀÇ Å¸ÀÔÀÌ ´õ Áß¿äÇÏ´Ù. °³¹ßÀÚÀÇ ÀÔÀå¿¡¼ ±¸ºÐÇÑ´Ù¸é BLOB(Binary LOBs), CLOB(Character LOBs), BFILE(Binary Files) Á¤µµ·Î ³ª´ ¼ö°¡ ÀÖ°Ú´Ù. »ç½Ç CLOB¿Ü¿¡ NCLOB(National Character LOBs)µµ ÀÖÁö¸¸ À̰͵µ ¿ª½Ã ¹®ÀÚÇü ŸÀÔÀ̹ǷΠ¾ïÁö·Î ±¸ºÐÇÏÁö´Â ¾Ê°Ú´Ù. CLOB : DB³»ºÎ¿¡ Á¸ÀçÇÏ´Â ´ë¿ë·®ÀÇ ÅØ½ºÆ® BLOB : Image, Sound, Video µîÀÇ ´ë¿ë·®ÀÇ DB³»ºÎ¿¡ Á¸ÀçÇÏ´Â µ¥ÀÌÅÍ BFILE : MPEG, JPEG, DIVX µîÀÇ ´ë¿ë·®ÀÇ DB¿ÜºÎ¿¡ Á¸ÀçÇÏ´Â ÆÄÀÏ LOB¸¦ »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¹«¾ùÀΰ¡?
°á·ÐºÎÅÍ ¸»ÇÏÀÚ¸é µ¥ÀÌÅÍÀÇ ¾ÈÀüÇÑ º¸È£¿Í µ¥ÀÌÅÍ ÀúÀåÀÇ Àϰü¼º ¶§¹®À̶ó ÇÒ ¼ö ÀÖ´Ù. ¸ÕÀú µ¥ÀÌÅÍÀÇ ¾ÈÀüÇÑ º¸È£¶ó´Â ¹®Á¦¸¦ »ìÆìº¸ÀÚ¸é ¿¹Àü¿¡ ÀÛ¼ºµÈ ¸¹Àº ¾îÇø®ÄÉÀ̼ǿ¡¼´Â »çÀÌÁî°¡ Å« ÆÄÀÏÀÇ °æ¿ì OSÂ÷¿ø¿¡¼ ¾îÇø®ÄÉÀ̼ÇÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¸¦ ¸¸µé¾î ³õ°í ÇÊ¿äÇÑ °æ¿ì Á¢±ÙÇϵµ·Ï ÇÑ °æ¿ì°¡ ¸¹´Ù. ÀÌ·¯ÇÑ °æ¿ì OS¿¡¼ ´©±º°¡ÀÇ ½Ç¼ö·Î µ¥ÀÌÅ͸¦ »èÁ¦ÇØ ¹ö¸°´Ù¸é µ¥ÀÌÅ͸¦ ¿ÏÀüÈ÷ ÀÒ¾î¹ö¸®´Â °ÍÀÌ´Ù. ±×·¡¼ DB¿¡ ÀúÀåÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½À¸·Î Àϰü¼º ¹®Á¦¸¦ º¸ÀÚ¸é ¾î¶² µ¥ÀÌÅÍ´Â DB¿¡ ÀúÀåÇÏ°í ¾î¶² µ¥ÀÌÅÍ´Â OS¿¡ ÀúÀåÇÏ°í ¾ðµí º¸±â¿¡µµ ¾à°£ ¹®Á¦°¡ ÀÖ¾î º¸ÀδÙ. ½ÇÁ¦·Î ½É°¢ÇÏ´Ù°í´Â ÇÒ ¼ö ¾øÁö¸¸ Áß¿äÇÑ ¹®Á¦¸¦ ³»Æ÷Çϰí ÀÖ´Ù. OS¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÑ´Ù´Â °ÍÀº OS¿¡¼ ¾îÇø®ÄÉÀ̼ÇÀÌÀ» ½ÇÇàÇÏ´Â »ç¿ëÀÚÀÇ ±ÇÇÑÀ¸·Î µ¥ÀÌÅÍ¿¡ Á÷Á¢ !!! Á¢±ÙÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ̰í ÀÌ´Â ÃæºÐÇÑ »ç°í¸¦ À¯¹ßÇÒ ¼ö ÀÖ´Â °¡´É¼ºÀ» °¡Áö´Â °ÍÀÌ´Ù. µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÑ´Ù¸é ¸ðµç µ¥ÀÌÅÍ(¹°·Ð °æ¿ì¿¡ µû¶ó ¾Æ´Ò ¼öµµ ÀÖÁö¸¸)´Â µ¥ÀÌÅͺ£À̽º¸¦ ÅëÇÏ¿© ÀÐ°í ¾²´Â °ÍÀÌ ¾î¶² ½Ã½ºÅÛÀ̵çÁö ´õ ÁÁ¾Æº¸ÀÌÁö ¾Ê°Ú´Â°¡? ¹°·Ð ÇÁ·Î±×·¥ °³¹ß¿¡¼ ¾à°£ÀÇ ¼ö°í°¡ ´õ ÇÊ¿äÇÏÁö¸¸ °³¹ß ´ç½Ã Á»´õ °í»ýÇϸé Á»´õ °ß°íÇÑ ½Ã½ºÅÛÀ¸·Î ¿Ï¼ºµÉ ¼ö ÀÖÀ¸¹Ç·Î LOB¸¦ »ç¿ëÇÏ°Ô µÇ´Â °ÍÀÌ´Ù. À§ÀÇ ¸ðµç ¼³¸íÀº OS Â÷¿øÀÇ º¸È£°¡ ÀÖÀ» °æ¿ì¿¡ ÇÑÁ¤ÇÏ´Â °ÍÀÌ´Ù. ±×·² ÀÏÀº ¾øÁö¸¸ OSÀÇ ¼öÆÛÀ¯Àú°¡ µé¾î¿Í¼ µ¥ÀÌÅͺ£À̽º¿Í ¾îÇø®ÄÉÀ̼ÇÀ» Áö¿ö¹ö¸°´Ù¸é º»Àεµ ÇÒ¸» ¾ø´Ù. LOB¿Í Long ŸÀÔ°ú´Â ¹«¾ùÀÌ ´Ù¸¥°¡?
¿ì¼± ¾Õ¿¡¼ º» ¹Ù¿Í °°ÀÌ Long ŸÀÔÀ» »ç¿ëÇÏÁö ¸»°í LOB¸¦ »ç¿ëÇϵµ·Ï ±ÇÇϰí ÀÖ´Ù. ÀÌ¿¡´Â ºÐ¸íÇÑ ÀÌÀ¯°¡ ÀÖÀ¸¸ç Çϳª¾¿ »ìÆìº¸ÀÚ.
´ëºÎºÐ ±×³É º¸¸é ¾Ë°ÚÁö¸¸ ¸î°¡Áö º¸Ãæ ¼³¸íÀ» ÇÏ°í ³Ñ¾î°¡°Ú´Ù. ¸ÕÀú Data¸¦ ÀúÀåÇϰí Á¢±Ù ÇÏ´Â ¹æ½Ä¿¡ ´ëÇØ¼ Á» ´õ »ìÆìº¸ÀÚ¸é LOBÀÇ °æ¿ì ½Çü Å×À̺íÀÌ ÀúÀåµÇ´Â ¼¼±×¸ÕÆ®(¿À¶óŬÀÇ ³í¸®Àû µ¥ÀÌÅÍ ´ÜÀ§)¿¡ ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï°í LOB ¼¼±×¸ÕÆ®°¡ µû·Î Á¸ÀçÇÑ´Ù. ½ÇÁ¦ Å×ÀÌºí¿¡´Â LOB ¼¼±×¸ÕÆ®ÀÇ À§Ä¡Á¤º¸¸¸ °¡Áö°í ÀÖÀ» »ÓÀÌ´Ù. ±×·¡¼ Å×À̺í°ú º°µµ·Î ÀúÀåµÇ°í µ¥ÀÌÅÍ´Â LocatorÀ» ÀÌ¿ëÇÏ¿© Á¢±ÙÇÑ´Ù°í ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½À¸·Î Object ŸÀÔÀ» ¸»ÇÏÀÚ¸é À̰ÍÀº ¿À¶óŬ 8¹öÀüºÎÅÍ Áö¿øÇÏ´Â °ÍÀ¸·Î µ¥ÀÌÅͺ£À̽º °´Ã¼ÀÇ °³³äÀ» Á¢¸ñÇÑ °ÍÀÌ´Ù. ±×¸® ¸¹ÀÌ ¾²Áö´Â ¾Ê´Â °Í °°´Ù. LOBÀÇ °æ¿ì Object ŸÀÔÀ» Áö¿øÇÑ´Ù. ¾î¶² ¹æ¹ýÀ¸·Î LOB¸¦ ´Ù·ê ¼ö Àִ°¡?
LOB¸¦ ´Ù·ç´Â ¹æ¹ý¿¡´Â ¼¼°¡Áö°¡ ÀÖ´Ù. ¾Ö¼®ÇϰԵµ SQL·Î´Â »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î¸¸ °¡´ÉÇÏ´Ù.
LOB Locator
¸ÕÀú C/C++ ÇÁ·Î±×·¥ ³»¿¡¼ LOB¸¦ »ç¿ëÇÏ·Á¸é LOB Locator¿¡ ´ëÇØ¼ ¾Ë¾Æ¾ß ÇÑ´Ù. ¾Õ¿¡¼ ¼³¸íÇÏ¿´µíÀÌ LOB´Â Å×ÀÌºí¼¼±×¸ÕÆ® ³»¿¡ Á¸µ¥ÇÏ´Â µ¥ÀÌÅͰ¡ ¾Æ´Ï¶ó LOB ¼¼±×¸ÕÆ®¿¡ µû·Î Á¸ÀçÇÑ´Ù°í ÇÏ¿´´Ù. LOB¿¡ Á¢±ÙÇϱâ À§Çؼ´Â ÀÌ LOBÀÇ Locator¸¦ ¾ò¾î¿Í¼ ÀÌ Locator¸¦ ÅëÇØ¼ ¸ðµç Á¶ÀÛÀ» ¼öÇàÇÑ´Ù. LOB LocatorÀÇ Á¾·ù¿Í »ç¿ë¹æ¹ýÀ» ¸ÕÀú »ìÆìº¸ÀÚ. /*
* LOBs¸¦ »ç¿ëÇϱâ À§Çؼ± ¹Ýµå½Ã Æ÷ÇÔÇØ ÁÖ¾î¾ß ÇÑ´Ù.
*/
#include <oci.h>
¡¦
/*
* °¢ LOBÀÇ pointer ŸÀÔÀÌ´Ù.
*/
OCIBlobLocator *blob;
OCIClobLocator *clob;
OCIBFileLocator *bfile;
¡¦
int main (int argc, char *argv[])
{
¡¦
/*
* À§¿¡¼ ¼±¾ðÇÑ LOB ŸÀÔÀÇ Æ÷ÀÎÅ͸¦ ÃʱâÈÇÏ¿© ºó LOB¸¦ ¸¸µé¾î ÁØ´Ù.
*/
exec sql allocate :blob;
exec sql allocate :clob;
exec sql allocate :bfile;
¡¦
exec sql free :blob;
exec sql free :clob;
exec sql free :bfile;
exit (EXIT_SUCCESS);
}
À§¿¡¼ ÃʱâÈµÈ LOB Locator¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ Ãß°¡ÇÏ°í º¯°æÇÏ°í »èÁ¦ÇÑ´Ù. ¸¸¾à ÃʱâÈµÈ »óÅ ±×´ë·Î Å×ÀÌºí¿¡ InsertÇÑ´Ù¸é SQL¹®Àå¿¡¼ EMPTY_BLOB (), EMPTY_CLOB ()¸¦ »ç¿ëÇÑ °Í°ú µ¿ÀÏÇÑ °á°úÀÌ´Ù. LOB Statements
ÀÌÁ¦ºÎÅÍ º»°ÝÀûÀÎ ¿¹Á¦¸¦ º¸±â·Î ÇÏÀÚ.
¿¹Á¦´Â Binary FileÀÇ ³»¿ëÀ» BLOBÄ®·³À¸·Î ÀÐ¾î µéÀÌ´Â °ÍÀÌ´Ù. µÎ¹øÂ° ¿¹Á¦´Â ¾Õ¿¡¼ ÀúÀåÇÑ BLOBÄ®·³¿¡¼ µ¥ÀÌÅ͸¦ ÀÐ¾î¼ Binary File·Î ±â·ÏÇÏ´Â °ÍÀÌ´Ù. µÎ°¡Áö °úÁ¤À» ¼öÇàÇÑ ÈÄ µÎ°³ÀÇ ÆÄÀÏÀ» ºñ±³ÇÏ¸é ¿Ïº®È÷ °°´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. Binary FileÀÇ ³»¿ëÀ» µ¥ÀÌÅͺ£À̽º¿¡ ¾²°í ÀÐÀ» ¼ö ÀÖ´Ù¸é ¾î¶² ÇÁ·Î±×·¥ÀÌ¶óµµ Å©°Ô ¹®Á¦ ¾øÀ» °ÍÀÌ´Ù. pic.jpg ¶ó´Â Å×½ºÆ® ÆÄÀÏÀº °¢ÀÚ ÁغñÇϵµ·Ï ÇÑ´Ù. /* ----------------------------------------------------------------- * MakefileÀÇ ³»¿ë * --------------------------------------------------------------- */ CC = gcc PROC = proc INCLUDE1 = $(ORACLE_HOME)/precomp/public INCLUDE2 = $(ORACLE_HOME)/rdbms/demo INCLUDE3 = $(ORACLE_HOME)/rdbms/public LIB = $(ORACLE_HOME)/lib TARGET1 = blob_file_to_db TARGET2 = blob_db_to_file TARGETS = $(TARGET1) $(TARGET2) OBJ1 = blob_file_to_db.o OBJ2 = blob_db_to_file.o OBJS = $(OBJ1) $(OBJ2) CFILE1 = blob_file_to_db.c CFILE2 = blob_db_to_file.c CFILES = $(CFILE1) $(CFILE2) PCFILE1 = blob_file_to_db.pc PCFILE2 = blob_db_to_file.pc PCFILES = $(PCFILE1) $(PCFILE2) all : $(TARGETS) $(TARGET1) : $(OBJS) $(CC) -o $(TARGET1) $(OBJ1) -L$(LIB) -lclntsh $(TARGET2) : $(OBJS) $(CC) -o $(TARGET2) $(OBJ2) -L$(LIB) -lclntsh .c.o : $(CFILES) $(CC) -c $< -I$(INCLUDE1) -I$(INCLUDE2) -I$(INCLUDE3) $(CFILE1) : $(PCFILE1) $(PROC) mode=ansi parse=none sqlcheck=full userid=scott/tiger $(PCFILE1) $(CFILE2) : $(PCFILE2) $(PROC) mode=ansi parse=none sqlcheck=full userid=scott/tiger $(PCFILE2) clean : -rm -f *.o core *.lis tp* $(TARGET1) $(TARGET2) $(TARGET3) $(OBJS) $(CFILES) binclean : -rm -f *.o core *.lis tp* $(OBJS) $(CFILES)
/* -----------------------------------------------------------------
* Binary FileÀ» ÀÐ¾î¼ µ¥ÀÌÅÍ º£À̽ºÀÇ BLOBÄ®·³¿¡ ÀúÀåÇÏ´Â ÇÁ·Î±×·¥
* --------------------------------------------------------------- */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <oci.h>
#define FAILURE 0
#define SUCCESS !FAILURE
exec sql include sqlca;
/* --------------------------------------------------------------------------
Àü ¿ª º¯ ¼ö ¼± ¾ð ºÎ
-------------------------------------------------------------------------- */
exec sql begin declare section;
#define MAXBUFLEN 100000
char *userpass;
unsigned int amt;
unsigned int offset = 1;
unsigned int length;
unsigned char buffer[MAXBUFLEN];
OCIClobLocator *clob;
OCIBlobLocator *blob;
exec sql end declare section;
/* --------------------------------------------------------------------------
ÇÔ ¼ö ±¸ Çö ºÎ
-------------------------------------------------------------------------- */
/*
* µ¥ÀÌŸ º£À̽º¿ÍÀÇ ¿¬µ¿¿¡ ¹®Á¦°¡ »ý°åÀ» °æ¿ì
* ½ÇÇàµÇ´Â ÇÔ¼ö·Î¼ SQL ¿¡·¯¹øÈ£¿Í ¸Þ¼¼Áö¸¦
* Ãâ·ÂÇÏ°í µðºñ¿ÍÀÇ Á¢¼ÓÀ» ²÷°í ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
*/
void sql_error (void)
{
printf ("Error : %d - %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
exec sql whenever sqlerror continue;
exec sql rollback work release;
exit (1);
}
/*
* µ¥ÀÌŸº£À̽º¿Í Á¢¼ÓÇÏ´Â ÇÔ¼ö.
*/
void ora_connect ()
{
userpass = strdup ("scott/tiger");
exec sql whenever sqlerror do sql_error ();
exec sql connect :userpass;
}
/*
* µ¥ÀÌŸº£À̽º¿Í Á¢¼ÓÀ» Á¾·áÇÏ´Â ÇÔ¼ö.
*/
void ora_disconnect (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql rollback work release;
}
/*
* DBÀÇ º¯°æ»çÇ×À» COMMIT ÇÏ´Â ÇÔ¼ö
*/
void ora_commit (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql commit work;
}
/*
* DBÀÇ º¯°æ»çÇ×À» ROLLBACK ÇÏ´Â ÇÔ¼ö
*/
void ora_rollback (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql rollback work;
}
/* ----------------------------------------------------------------------
M A I N F U N C T I O N
---------------------------------------------------------------------- */
int main (void)
{
FILE *f;
int filelen = 0, nbytes = 0;
ora_connect ();
exec sql whenever sqlerror do sql_error ();
exec sql var buffer is raw(MAXBUFLEN);
/*
* LOB Å×À̺íÀ» µå¶øÇÏ°í »õ·Î »ý¼ºÇÑ´Ù.
*/
exec sql drop table lobs;
exec sql create table lobs (b_lob blob);
/*
* BLOB ŸÀÔÀÇ Æ÷ÀÎÅ͸¦ ÃʱâÈÇÏ¿© ºó LOB¸¦ ¸¸µé¾î ÁØ´Ù.
*/
exec sql allocate :blob;
/*
* DBÀÇ Å×ÀÌºí¿¡ BLOB ·¹Äڵ带 »ý¼ºÇϰí LOB Æ÷ÀÎÅÍ¿Í ¿¬°áÇÑ´Ù.
*/
exec sql insert into lobs (b_lob) values (:blob);
exec sql select b_lob into :blob from lobs where rownum = 1 for update;
/*
* ÆÄÀÏÀ» ¿°í ÆÄÀÏ »çÀÌÁ ±¸ÇÑ´Ù.
*/
f = fopen ((const char *)"pic.jpg", (const char *)"r");
if (f == NULL)
{
printf ("File Open Error!!!\n");
exit(1);
}
fseek (f, 0, SEEK_END);
filelen = ftell (f);
fseek (f, 0, SEEK_SET);
printf ("File Length : %d\n", filelen);
/*
* ÆÄÀÏÀ» ¹öÆÛ·Î ÀоîµéÀδÙ.
*/
amt = filelen;
nbytes = fread (buffer, 1, MAXBUFLEN, f);
length = nbytes;
printf ("%d Bytes Read\n", nbytes);
/*
* ¹öÆÛÀÇ ³»¿ëÀ» DB¿¡ ³Ö´Â´Ù.
*/
exec sql lob write one :amt from :buffer with length :length into :blob at :offset;
printf ("%d Bytes wrote\n", amt);
ora_commit ();
ora_disconnect ();
fclose (f);
exit (0);
}
/* -----------------------------------------------------------------
* µ¥ÀÌÅÍ º£À̽ºÀÇ BLOBÄ®·³¿¡¼ Binary Data¸¦ ÀÐ¾î¼ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ÇÁ·Î±×·¥
* --------------------------------------------------------------- */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <oci.h>
#define FAILURE 0
#define SUCCESS !FAILURE
exec sql include sqlca;
/* --------------------------------------------------------------------------
Àü ¿ª º¯ ¼ö ¼± ¾ð ºÎ
-------------------------------------------------------------------------- */
exec sql begin declare section;
#define MAXBUFLEN 100000
char *userpass;
unsigned int amt;
unsigned int offset = 1;
unsigned int length;
unsigned char buffer[MAXBUFLEN];
OCIClobLocator *clob;
OCIBlobLocator *blob;
exec sql end declare section;
/* --------------------------------------------------------------------------
ÇÔ ¼ö ±¸ Çö ºÎ
-------------------------------------------------------------------------- */
/*
* µ¥ÀÌŸ º£À̽º¿ÍÀÇ ¿¬µ¿¿¡ ¹®Á¦°¡ »ý°åÀ» °æ¿ì
* ½ÇÇàµÇ´Â ÇÔ¼ö·Î¼ SQL ¿¡·¯¹øÈ£¿Í ¸Þ¼¼Áö¸¦
* Ãâ·ÂÇÏ°í µðºñ¿ÍÀÇ Á¢¼ÓÀ» ²÷°í ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù.
*/
void sql_error (void)
{
printf ("Error : %d - %s\n", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
exec sql whenever sqlerror continue;
exec sql rollback work release;
exit (1);
}
/*
* µ¥ÀÌŸº£À̽º¿Í Á¢¼ÓÇÏ´Â ÇÔ¼ö.
*/
void ora_connect ()
{
userpass = strdup ("scott/tiger");
exec sql whenever sqlerror do sql_error ();
exec sql connect :userpass;
}
/*
* µ¥ÀÌŸº£À̽º¿Í Á¢¼ÓÀ» Á¾·áÇÏ´Â ÇÔ¼ö.
*/
void ora_disconnect (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql rollback work release;
}
/*
* DBÀÇ º¯°æ»çÇ×À» COMMIT ÇÏ´Â ÇÔ¼ö
*/
void ora_commit (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql commit work;
}
/*
* DBÀÇ º¯°æ»çÇ×À» ROLLBACK ÇÏ´Â ÇÔ¼ö
*/
void ora_rollback (void)
{
exec sql whenever sqlerror do sql_error ();
exec sql rollback work;
}
/* ----------------------------------------------------------------------
M A I N F U N C T I O N
---------------------------------------------------------------------- */
int main (void)
{
FILE *f;
int nbytes = 0;
ora_connect ();
exec sql whenever sqlerror do sql_error ();
exec sql var buffer is raw(MAXBUFLEN);
/*
* BLOB ŸÀÔÀÇ Æ÷ÀÎÅ͸¦ ÃʱâÈÇÏ¿© ºó LOB¸¦ ¸¸µé¾î ÁØ´Ù.
*/
exec sql allocate :blob;
/*
* DBÀÇ Å×ÀÌºí¿¡¼ BLOB ·¹ÄÚµå¿Í LOB Æ÷ÀÎÅÍ¿Í ¿¬°áÇÑ´Ù.
*/
exec sql select b_lob into :blob from lobs where rownum = 1 for update;
/*
* BLOB Ä®·³ÀÇ µ¥ÀÌŸ ±æÀ̸¦ ¾ò¾î¿Â´Ù.
*/
exec sql lob describe :blob get length into :length;
/*
* ºó LOBÄ®·³À̸é Á¾·á
*/
if (length == 0) sql_error ();
/*
* BLOB Ä®·³ÀÇ µ¥ÀÌŸ¸¦ ÀúÀåÇÒ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.
*/
f = fopen ((const char *)"test.jpg", (const char *)"w");
if (f == NULL)
{
printf ("File Open Error!!!\n");
exit(1);
}
/*
* BLOB Ä®·³¿¡¼ µ¥ÀÌŸÀÇ ±æÀ̸¸Å Àоî¿Í ÆÄÀÏ¿¡ ÀúÀåÇÑ´Ù.
*/
exec sql lob read :amt from :blob into :buffer with length :length;
printf ("%d bytes read from DB\n", amt);
nbytes = fwrite ((void *)buffer, 1, amt, f);
printf ("%d bytes write to file\n", nbytes);
fclose (f);
ora_disconnect ();
exit (0);
}
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|