HOME   ·Î±×ÀΠ  ȸ¿ø°¡ÀÔ
    
ȸ¿ø°¡ÀÔ
ºñ¹Ð¹øÈ£ ã±â ÀÚµ¿·Î±ä
ÀÌÀü°Ô½ÃÆÇ
   free_board
   °Ç°­°Ô½ÃÆÇ
   ¿À¶óŬDB
   Linux
   HTML/javascript
   Áú¹®°ú ´ä
È£¼­±â
   À̹ÌÁö°Ô½ÃÆÇ  
   °Ç°­°Ô½ÃÆÇ  
   À½¾ÇÀÚ·á  
   ¼ºÁØÀÌ °Ô½ÃÆÇ  
[ÀϹÝ] ÇÁ·Î¾¾ pro*c ÄÄÆÄÀÏ ¹æ¹ý
  È£¼® ´Ô²²¼­ ¾´ ±ÛÀÔ´Ï´Ù - 220.¢½.198.227 ÀÐÀ½:5851  
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/oracle_proc_programing http://www.joinc.co.kr/modules.php?name=News&file=article&sid=94&mode=nested&order=0&thold=0

3Àý. Pro *C/*C++ ¼Ò°³

Pro *C(ÀÌÇÏ proc) ´Â ÀÏÁ¾ÀÇ ÇÁ¸®ÄÄÆÄÀÏ·¯´Ù. Áï CÄڵ忡 ¿À¶óŬ°ü¸®¸¦ À§Çؼ­ ÀÏ»óÀûÀ¸·Î »ç¿ëÇÏ´Â SQL, PL/SQL µîÀ» °áÇÕ½ÃÄѼ­ ÄÚµùµÈ ÇÁ·Î±×·¥À» CÄÄÆÄÀÏ·¯(¿©±â¿¡¼­´Â gcc)°¡ ÀνÄÇÒ¼ö ÀÖ´Â C ÄÚµå ÆÄÀÏ·Î º¯°æ½ÃÄÑÁÖ´Â ÀÏÀ» ÇÑ´Ù. ¿À¶óŬ¿¡¼­´Â proc ¶ó´Â ÇÁ¸®ÄÄÆÄÀÏ·¯¸¦ Á¦°øÇÏ°í ÀÖ´Ù.


3.1Àý. ¿Ö proc ¸¦ »ç¿ëÇϴ°¡

¾Æ¸¶µµ 1GL ÀÌ´Ï 2GL ÀÌ´Ï ÇÏ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î ¼¼´ë¸¦ ³ªÅ¸³»´Â ¸»¿¡ ´ëÇؼ­ µé¾î º¸¾ÒÀ»°ÍÀÌ´Ù. º¸Åë 1¼¼´ë ¾ð¾î, 2¼¼´ë ¾ð¾î¶ó´Â ½ÄÀ¸·Î ºÒ¸®´Âµ¥, ÀÌ ºÐ·ù¿¡ µû¸£¸é C ¾ð¾î´Â 3¼¼´ë ¾ð¾î(3GL)ÀÌ´Ù. ÀÌ¿¡ ¹ÝÇØ SQL(Structur query language) ¾ð¾î´Â 4¼¼´ë ¾ð¾î·Î½á, 3GL ¾ð¾î°¡ ÀýÂ÷½Ä ¾ð¾îÀε¥ ¹ÝÇؼ­, 4¼¼´ë ¾ð¾î´Â Á»´õ ÀÚ¿¬¾î¿¡ ±ÙÁ¢ÇÑ ¾ð¾îÀû Ư¼ºÀ» °¡Áø´Ù.

ÀÌ·¯ÇÑ 4GL ¾ð¾î°¡ °¡Áö´Â ÀÚ¿¬¾î¿¡ ±ÙÁ¢ÇÑ Æ¯¼ºÀº ¾ð¾î »ç¿ëÀ» Á÷°üÀûÀÌ°í ½±°Ô ÇÒ¼ö ÀÖµµ·Ï ¸¸µé¾îÁÖÁö¸¸, ÀýÂ÷ÁöÇâ ÀûÀÎ ¾÷¹«¸¦ ó¸®Çϱ⿡´Â ±×¸® ÀûÇÕÇÏÁö°¡ ¾Ê´Ù. ±×·¡¼­ ¸¹Àº °æ¿ì C, C++, JAVA µîÀÇ ¾ð¾îµé°ú °áÇÕÇؼ­ »ç¿ë ÇÏ°Ô µÈ´Ù.

±×·±µ¥ ´ë°ÔÀÇ °æ¿ì ÀÌ·¯ÇÑ 3GL¾ð¾î¿Í 4GL ¾ð¾îÀÇ °áÇÕ°úÁ¤Àº ²Ï³ª ¼º°¡½Å ÀÛ¾÷À̸ç, ¸¹Àº ½Ã°£À» ÇÊ¿ä·Î ÇÑ´Ù. SQL Àº º°µµ·Î ÇÏ°í, °Å±â¿¡ µ¡ºÙ¿©¼­ ´Ù¾çÇÑ API µéÀ» »õ·Î ÀÍÇô¾ß Çϱ⠶§¹®ÀÌ´Ù. ±×³ª¸¶ mysql, postgresql °ú °°Àº ºñ±³Àû ´Ü¼øÇÑ(¿À¶óŬ¿¡ ºñÇؼ­) DBÀÇ °æ¿ì ¸î°¡Áö API ¸¸ ÀÍÈûÀ¸·Î½á ±×¸® ¾î·ÆÁö ¾Ê°Ô ÇÁ·Î±×·¡¹Ö ÇÒ¼ö ÀÖÁö¸¸, ¿À¶óŬÀÇ °æ¿ì »ó´çÇÑ ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ·¯ÇÑ Àú¼öÁØ¿¡¼­ Á÷Á¢Á¢±ÙÀ» À§Çؼ­ Á¦°øÇÏ´Â°Ô OCI(Oracle Call Interface) ¶ó´Â API ¸ðÀ½ÀÌ´Ù.

±×·¡¼­ ³ô´õ ³ôÀº ·¹º§¿¡¼­ C ¾ð¾î¿Í SQL ¾ð¾î¸¦ °áÇÕÇؼ­ ÇÁ·Î±×·¡¹Ö ÇÒ¼ö Àִ ȯ°æÀ» Á¦°øÇÏ°íÀÚ ÇÏ´Â ¸ñÀû¿¡¼­ ³ª¿Â°Ô ¹Ù·Î proc ÀÌ´Ù. proc ¼Ò¾²¸¦ º¸¸é ¾Ë°ÚÁö¸¸ º¹ÀâÇÑ API µé ´ë½Å¿¡ SQL ÀÇ ¹®ÀåÀ» ±×´ë·Î »ç¿ëÇÏ°í ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.

¶ÇÇÑ proc ´Â C ÄÚµå³×¿¡ PL/SQL ºí·°À» Á÷Á¢ ³Ö¾î¼­ ÄÚµùÇÒ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù. PL/SQL Àº 4GL ¾ð¾îÀÇ ÀÚ¿¬¾îÀûÀΠƯ¼º¿¡ ÀýÂ÷½Ä ¾ð¾îÀÎ 3GL ¾ð¾îÀÇ Æ¯Â¡À» °áÇÕ½ÃŲ µµ±¸ÀÌ´Ù. PL/SQL ¿¡ ´ëÇÑ ³»¿ëÀº ÀÚ¼¼È÷ ´Ù·çÁö´Â ¾ÊÀ»°ÍÀ̸ç, ÇÊ¿äÇÒ°æ¿ì ¾à°£¾¿ ´Ù·çµµ·Ï ÇÏ°Ú´Ù. ¾î¶µç proc ¸¦ ÀÌ¿äÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ·Á¸é PL/SQL ¿¡ ¾î´ÀÁ¤µµ Àͼ÷ÇØÁú ÇÊ¿ä°¡ ÀÖ´Ù. PL/SQL Àº 4GL ¾ð¾îÀÇ Æ¯¼ºÀ» °¡Áö¹Ç·Î C, JAVA µî¿¡ ºñÇؼ­ ¸Å¿ì ½±°Ô ÀÍÈú¼ö ÀÖ´Ù.


3.2Àý. proc ÄÄÆÄÀÏ °úÁ¤

ÀÏ´Ü ÇÁ·Î±×·¡¸Ó´Â SQL ¹®ÀÌ Æ÷ÇԵǾî ÀÖ´Â Äڵ带 ÀÛ¼ºÇÑ´Ù. º¸ÅëÀÌ·¯ÇÑ ÄÚµå´Â È®ÀåÀÚ°¡ .pc ·Î µÇ¾îÀÖ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ .pc ÄÚµå´Â gcc ÄÄÆÄÀÏ·¯°¡ ÄÄÆÄÀÏ ÇÒ¼ö ¾øÀ½À¸·Î gcc °¡ ÀÌÇØÇÒ¼ö ÀÖ´Â .c ÄÚµå·Î º¯°æ½ÃÄÑÁÖ´Â "¼±ÇàÄÄÆÄÀÏ" °úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ¼±ÇàÄÄÆÄÀÏ·¯°Å .pc ÆÄÀÏÀ» .c ÄÚµå·Î º¯°æÇÑ ÀÌÈÄÀÇ ÄÄÆÄÀÏ °úÁ¤Àº ±âÁ¸ c ÄÄÆÄÀÏ °úÁ¤°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.
     +--------------+
     | Proc Program | SQL ¹®À» Æ÷ÇÔ
     | .pc          | 
     +--------------+
            ¡é
     +--------------+
     | ¿À¶óŬ       | 
     | ¼±ÇàÄÄÆÄÀÏ·¯ | 
     | proc         |
     +--------------+
            ¡é
     +--------------+
     | Çؼ®µÈ       | ±âÁ¸ÀÇ SQL ¹®Àº library ¸¦ 
     | .c ½î¾²ÄÚµå  | Á÷Á¢ È£ÃâÇÏ´Â ¹®À¸·Î º¯°æµÊ 
     +--------------+
            ¡é
     +--------------+
     | C ÄÄÆÄÀÏ·¯   | 
     +--------------+
            ¡é
     +--------------+
     | Object ÆÄÀÏ  | 
     +--------------+
            ¡é
     +--------------+
     | Linker       | ¿À¶óŬ ¶óÀ̺귯¸®°¡ ¸µÅ©µÊ 
     +--------------+
            ¡é
     +--------------+
     | ½ÇÇàÆÄÀÏ     | 
     +--------------+

			


4Àý. °£´ÜÇÑ proc ÇÁ·Î±×·¥ ¿¹Á¦

´ÙÀ½Àº zipcode Å×ÀÌºí¿¡ ÃѸÀÇ ÀÚ·á°¡ µé¾îÀÖ´ÂÁö ¾Ë¾Æ¿À´Â ¾ÆÁÖ °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù.

¿¹Á¦ : zipcode.pc
 
#include 
#include 

/* SQLCA ¸¦ ¼±¾ðÇÑ´Ù */
EXEC SQL INCLUDE SQLCA;

int main(int argc, char **argv)
{
    /* ¼±¾ðºÎ */
    EXEC SQL BEGIN DECLARE SECTION;
            int count = 0;
            char userid[40]= "system/manager@ORACLE";
    EXEC SQL END DECLARE SECTION;

    /* DB ¿¬°á */
    EXEC SQL CONNECT :userid;

    /* ¿¡·¯ ó¸® */
    if (sqlca.sqlcode < 0)
    {
            printf("%s\n", sqlca.sqlerrm.sqlerrmc);
            EXEC SQL ROLLBACK WORK RELEASE;
            exit(0);
    }

    /* Äõ¸® */ 
    EXEC SQL SELECT count(*) 
            INTO: count  
            FROM zipcode;

    /* Äõ¸® °á°ú¿¡ ´ëÇÑ ¿¡·¯Ã³¸® */
    if (sqlca.sqlcode != 0) 
    {
            EXEC SQL COMMIT WORK RELEASE;
            return 0;
    }

    printf("¿ìÆíÁÖ¼Ò µ¥ÀÌŸ : %d °³\n", count);

    /* DB ¿¬°á Á¾·á */
    EXEC SQL COMMIT WORK RELEASE;
}
		
Äڵ带 º¸¸é ¾Ë°ÚÁö¸¸ ¹¹ º¹ÀâÇÏ°Ô ÀÌ°Í Àú°Í ÀÎŬ·çµå ½ÃÄÑÁÙ ÇÊ¿äµµ ¾ø°í, SQL ¹®ÀÌ °ÅÀÇ ±×´ë·Î ¾²¿©¼­ ÀÌÇØÇϱ⵵ ¸Å¿ì ½±´Ù´Â °ÍÀ» ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù. Âü°í·Î ¿À¶óŬ proc ½î¾²ÆÄÀÏ¿¡¼­ÀÇ ÁÖ¼®Àº /* */ ¸¸ »ç¿ë°¡´ÉÇÏ´Ù. // À» ½è´Ù°¡´Â ¿À·ù°¡ ¹ß»ýÇÑ´Ù.

À̹ø ¹®¼­´Â ´ÜÁö ÀÌ·±½ÄÀ¸·Î ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÏ´Ù¶ó´Â Á¤µµ¸¸ º¸¿©ÁÙ °ÍÀÓÀ¸·Î À§ÀÇ ÄÚµåÀÇ ¼³¸íÀº »ý·«Çϵµ·Ï ÇÏ°Ú´Ù. ³ªÁß¿¡ ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇÏ°Ú´Ù.


4.1Àý. ÄÄÆÄÀÏ Çϱâ

¿ì¼± zipcode.pc ÆÄÀÏÀ» proc ¼±Çà ÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇؼ­ zipcode.c ÆÄÀÏÀ» ¾ò¾î³½´ÙÀ½ gcc¸¦ ÀÌ¿ëÇؼ­ object ÆÄÀÏÀ» ¸¸µé°í ¸µÅ©°úÁ¤À» °ÅÃļ­ ½ÇÇàÆÄÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ °úÁ¤ÀÌ´Ù.
[oracle@localhost proc]$ proc zipcode INCLUDE=include/ \ 
> include=/usr/u01/product/8.1.7/precomp/public/ \
> include=/usr/u01/product/8.1.7/rdbms/demo/ \
> include=/usr/u01/product/8.1.7/rdbms/public/ \
> include=/usr/u01/product/8.1.7/network/public/ \
> PARSE=NONE RELEASE_CURSOR=YES MODE=ANSI

Pro*C/C++: Release 8.1.7.0.0 - Production on Thu Oct 31 00:29:15 2002

(c) Copyright 2000 Oracle Corporation.  All rights reserved.

System default option values taken from: /usr/u01/product/8.1.7/precomp/admin/pcscfg.cfg

[oracle@localhost proc]$ gcc -c -o zipcode.o zipcode.c -I$ORACLE_HOME/precomp/public \ 
> -I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public \
> -I$ORACLE_HOME/network/public

[oracle@localhost proc]$ gcc -o zipcode zipcode.o -L$ORACLE_HOME/lib -lclntsh
			
ÀÌ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°¸é ´ÙÀ½°ú °°Àº °á°ú°ªÀ» º¸¿©ÁÙ °ÍÀÌ´Ù.
[oracle@localhost proc]$ ./zipcode 
¿ìÆíÁÖ¼Ò µ¥ÀÌŸ : 43476 °³
			


4.2Àý. ÄÄÆÄÀÏ °úÁ¤À» Makefile ·Î °ü¸®Çϱâ

ÇÏÁö¸¸ À§ÀÇ ¹æ¹ý´ë·Î ¼öµ¿À¸·Î Äڵ带 ÄÄÆÄÀÏ ÇÏ´Â°Ç ºñ »ý»êÀûÀÎ ¹æ¹ýÀÌ´Ù. ±×·¯¹Ç·Î Makefile À» ¸¸µé¾î¼­ °ü¸®Çϵµ·Ï ÇÏÀÚ.

Makefile
TARGET          = zipcode

CC              = gcc
PROC            = proc
LIB             = -L$(ORACLE_HOME)/lib -lclntsh
MYINC           = include/
PROCINC         = include=$(ORACLE_HOME)/precomp/public/ include=$(ORACLE_HOME)/rdbms/demo/ \
	include=$(ORACLE_HOME)/rdbms/public/ \
	include=$(ORACLE_HOME)/network/public/ 
CINC            = -I$(ORACLE_HOME)/precomp/public/ -I$(ORACLE_HOME)/rdbms/demo/ \
	-I$(ORACLE_HOME)/rdbms/public/ -I$(ORACLE_HOME)/network/public/ 

ORA_OPT         = PARSE=NONE RELEASE_CURSOR=YES MODE=ANSI
CC_OPT          =

OBJECT          = zipcode.o
ORA_GARBAGE     = *.dcl *.cod *.cud *.lis

######## implicit rules
.SUFFIXES: .pc .c

.pc.c:
	$(PROC) $* INCLUDE=$(MYINC) $(PROCINC) $(ORA_OPT)
.c.o:
	$(CC) -c -o $*.o $*.c -I $(MYINC) $(CINC)

####### build rules

all:            $(TARGET)

$(TARGET):      $(OBJECT)
	$(CC) -o $(TARGET) $(OBJECT) $(LIB)

zipcode.c: zipcode.pc
zipcode.o: zipcode.c

clean:
	rm -f $(TARGET) $(OBJECT) $(ORA_GARBAGE)
			
ÀÌÇØÇϴµ¥ Ưº°È÷ ¾î·Á¿òÀº ¾øÀ»°ÍÀ̶ó°í »ý°¢µÈ´Ù. Makefile ¿¡ ´ëÇÑ ³»¿ëÀº make ¸¦ ÀÌ¿ëÇÑ ÇÁ·ÎÁ§Æ® °ü¸® (1)¸¦ Âü°íÇϵµ·Ï ÇÑ´Ù.


5Àý. °á·Ð

ÀÌ»ó proc ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ °¡Àå ±âº»ÀûÀΠȯ°æ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸¾ÒÀ¸¸ç, ¾ÆÁÖ °£´ÜÇÑ ¿¹¸¦ µé¾î¼­ proc ÇÁ·Î±×·¡¹ÖÀ» ¸Àº¸¾Ò´Ù. ´ÙÀ½¿¡´Â Á»´õ ÀÚ¼¼ÇÑ proc ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ³»¿ëÀ» ´Ù·çµµ·Ï ÇÏ°Ú´Ù.



¸ñ·Ï

ºÐ·ù ¼±ÅÃ
7 ÀÏ¹Ý    Programmer's Guide to the Pro*C/C++ Precompiler È£¼® 05-08-02 4226
  ÀÏ¹Ý    ÇÁ·Î¾¾ pro*c ÄÄÆÄÀÏ ¹æ¹ý È£¼® 06-02-09 5943
ÀÏ¹Ý    ÇÁ·Î¾¾ pro*c ÄÄÆÄÀÏ ¹æ¹ý È£¼® 06-02-10 5852
  ÀÏ¹Ý    ÇÁ·Î¾¾ pro*c ÄÄÆÄÀÏ ¹æ¹ý È£¼® 06-06-13 4702
6 ÀÏ¹Ý SGA TUNING SCRIPT È£¼® 05-07-22 3427
5 ÀÏ¹Ý ¿ë·®°è»ê Å×À̺í À妽º, µ¥ÀÌºí ±âŸ È£¼® 05-07-06 6052
4 ÀÏ¹Ý ORA-01034: ORA-27101: ¿¡·¯¹ß»ýÀº ÁÖ·Î SID ¹®Á¦ È£¼® 05-07-06 7401
3 ÀÏ¹Ý ¹é¾÷À» À§ÇÑ Ç¥ÁØ ½ºÅ©¸³Æ®ÀÇ ÀÛ¼º È£¼® 05-07-06 3833
2 ÀÏ¹Ý RAISE_APPLICATION_ERROR È£¼® 05-06-20 4693
1 ÀÏ¹Ý TEST (1) È£¼® 05-06-11 3417
  ÀÏ¹Ý    TEST È£¼® 05-06-13 3424
óÀ½ÀÌÀü  11 

 
Copyright © zenos.pe.kr. All rights reserved.