ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. PL/SQL
À̹ø¿¡ ´Ù·ê ³»¿ëÀº Pro*C/C++ ¿¡¼ PL/SQLÀ» ÇÒ ¼ö Àִ°¡? ¸¸¾à ÇÒ ¼ö ÀÖ´Ù¸é ¾î¶»°Ô Çϴ°¡? ¶ó´Â ¹®Á¦´Ù. ÀÏ´Ü °á·ÐºÎÅÍ ¸»ÇÏÀÚ¸é Pro*C/C++¿¡¼µµ PL/SQLÀ» ÇÒ ¼ö ÀÖ´Ù. Ưº°È÷ ¾î·Á¿î °Í ¾øÀÌ °£´ÜÈ÷ Anonymous PL/SQL Block, Procedure, Function, Package¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¸¸¾à PL/SQL¿¡ ´ëÇØ¼ ¾ËÁö ¸øÇÏ´Â µ¶ÀÚ°¡ ÀÖ´Ù¸é ¿À¶óŬ ¸Å´º¾óÀ̳ª PL/SQL°ü·Ã ¼ÀûÀ» Âü°íÇÏ¿© ¸ÕÀú ½ÀµæÇϱ⠹ٶõ´Ù. ¿äÁò ¼Á¡¿¡ °¡º¸¸é PL/SQL ¼ÀûÀÇ °æ¿ì ¸î±Ç ³ª¿ÍÀִ°ÍÀ¸·Î ¾È´Ù. °í±Þ¼´Â ¾øÁö¸¸ ±âÃʼ·Î´Â ÈǸ¢ÇÑ Ã¥µéÀÌ´Ù.
¿ì¸®°¡ Áö±Ý±îÁö ¹è¿ö¿Â ³»¿ëµé·Î º¸°Çµ¥ Áö±Ý±îÁö ¹è¿î ³»¿ëµéÀÌ¸é ¸ðµç ÇÁ·Î±×·¡¹Ö¿¡¼ ¸·Èû¾øÀÌ Ã³¸®ÇÒ¼ö ÀÖÀ» Á¤µµÀÇ ¼öÁØÀÌ´Ù. »ç½Ç C/C++°ú Oracle°úÀÇ ¿¬µ¿À̶ó ±×·¡ºÁ¾ß º°°Å ¾øÁö ¾Ê´Â°¡? ¸ðµç ·ÎÁ÷Àº C/C++¿¡¼ ó¸®ÇÏ°í µ¥ÀÌÅ͸¦ ´ÜÁö Oracle¿¡¼ ¾ò¾î¿À°í ´Ù½Ã Oracle¿¡ ÀúÀåÇÏ´Â °ÍÀÌ´Ù. ±×·³ PL/SQLÀ̶õ °ÍÀ» ¿Ö ÇØ¾ß Çϴ°¡? ¶ó´Â Àǹ®ÀÌ »ý±ä´Ù. ¸î°¡Áö ÀÌÀ¯°¡ ÀÖ±ä ÇÏÁö¸¸ ¹Ýµå½Ã ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ï µ¶ÀÚµéÀÌ ¾Ë¾Æ¼ ¼±ÅÃÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ¾Æ·¡ÀÇ ¸î°¡Áö ÀÌÀ¯¸¦ º¸ÀÚ. Performance
ÀϹÝÀûÀÎ ¼º´ÉÀÇ Çâ»óÀ¸·Î ¹Þ¾ÆµéÀÏ ¼ö´Â ¾ø´Â ¹®Á¦ÀÌ´Ù. PL/SQLÀ» ¾´´Ù°í ÇØ¼ ¹Ýµå½Ã ¼º´ÉÀÇ Çâ»óÀÌ ÀϾ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾î¶² °æ¿ì¿¡´Â PL/SQLÀ» »ç¿ëÇÔÀ¸·Î½á ¼º´ÉÀÇ Çâ»óÀ» º¼ ¼öµµ ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ¿¹¸¦ µé¾îº¸ÀÚ. C/C++¿¡µµ for¹®ÀÌ ÀÖ°í PL/SQL¿¡µµ for¹®ÀÌ ÀÖ´Ù. µÎ°æ¿ì¿¡¼ for¹®¸¸À» ³õ°í º»´Ù¸é Àý´ë PL/SQLÀÌ ºü¸£´Ù°í ÇÒ ¼ö ¾ø´Ù. ÀÌ °æ¿ìÀÇ ¼º´ÉÀÇ Çâ»óÀ̶õ ¿À¶óŬ·ÎºÎÅÍ ´ë·®ÀÇ µ¥ÀÌÅ͸¦ ÆÐÄ¡ÇØ¿À°í C/C++¿¡¼ for¹®À» ÅëÇØ¼ µ¥ÀÌÅ͸¦ Á¶ÀÛÇÏ´Â °Í º¸´Ù´Â PL/SQL·Î ÀÌ¹Ì Á¶ÀÛµÈ ¼Ò·®ÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °ÍÀÌ ´õ ºü¸£´Ù´Â °ÍÀÌ´Ù. ³×Æ®¿÷ÀÇ ºÎÇ϶ó´Â ¹®Á¦´Â ±×¸® °£´ÜÈ÷ »ý°¢ÇÒ ¹®Á¦°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ºÐ¸í PL/SQLÀÌ ÀÏ¹Ý ¾ð¾î¿Í ¶Ç´Ù¸¥ Àç¹Ì¸¦ ÁÖ±â´Â ÇÏÁö¸¸ ´Ü¼øÈ÷ ¼º´ÉÀÇ Çâ»óÀ̶õ ¸»À» ±×´ë·Î ¹Þ¾Æµé¿© PL/SQL ½ÅºÀÀÚ°¡ µÇ±â º¸´Ù´Â Çѹø ´õ »ý°¢ÇÏ¿© ¾î¶² °ÍÀÌ ½Ã½ºÅÛÀÇ ¼º´É¿¡ ³ªÀ»Áö °í¹ÎÇØ º¸´Â °ÍÀÌ ÁÁ°Ú´Ù. Integration with Oracle
ÀÌ ºÎºÐÀº »ó´çÈ÷ À¯¿ëÇÑ Á¡À̶ó ÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¹ÖÀ» ÇÏ¸é¼ ¼ö¸¹Àº Å×À̺íÀÇ °¢°¢ÀÇ Ä®·³ µ¥ÀÌÅÍ Å¸ÀÔÀ» ±â¾ïÇÏÁö ¸øÇÏ¿© ÇÒ¶§¸¶´Ù Å×À̺í Á¤ÀǸ¦ º¸°í ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÇÏÁö¸¸ PL/SQL¿¡¼´Â %TYPEÀ» »ç¿ëÇÏ¿© º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» Á¤ÀÇÇÒ ¼ö °¡ ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» Á÷Á¢ ÁöÁ¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¡®¾î´À Å×À̺íÀÇ ¾î´À Ä®·³°ú °°Àº µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î Çϰڴ١¯ ¶ó°í ÁöÁ¤ÇØ ÁÖ´Â °ÍÀÌ´Ù. À̺κÐÀº »ó´çÈ÷ Æí¸®ÇÑ ±â´ÉÀÎ °ÍÀÌ´Ù.
Cursor FOR Loops
±× Æí¸®ÇÏ´Ù´Â ¡®Cursor For Loop¡¯ÀÌ´Ù. Pro*C/C++»Ó¸¸ ¾Æ´Ï¶ó PL/SQL¿¡¼µµ Ä¿¼¸¦ ¼±¾ðÇϰí Loop¸¦ ¼öÇàÇÏ´Â °ÍÀº ¿©°£ ±ÍÂúÀº ÀÏÀÌ ¾Æ´Ï´Ù. ÇÏÁö¸¸ PL/SQL¿¡¼´Â ƯÈ÷ ÆíÇÑ ¹æ¹ýÀÌ Á¸ÀçÇϴµ¥ ±×°ÍÀÌ ¹Ù·Î Cursor For LoopÀÌ´Ù. Ä¿¼¸¦ ¼±¾ðÇÏ°í ¿°í ÆÐÄ¡ÇÏ°í ´Ý´Â ¸ðµç °úÁ¤À» ÀÚµ¿À¸·Î ÇØÁÖ°í Ä¿¼¿¡¼ µ¥ÀÌÅ͸¦ ÆÐÄ¡ÇÒ ·¹ÄÚµåÇüÀÇ º¯¼ö¸¶Àú ¼±¾ðÇÒ ÇÊ¿ä¾øÀÌ ÀÚµ¿À¸·Î ¸¸µé¾î ÁØ´Ù. ÇѹøÀÌ¶óµµ »ç¿ëÇØº¸¸é ¾Ë°ÚÁö¸¸ ¸Å¿ì Æí¸®ÇÑ ±â´ÉÀÓ¿¡´Â Ʋ¸²¾ø´Ù. Procedures and Functions and Packages
ÇÁ·Î½ÃÀú, ÇÔ¼ö, ÆÐŰÁö´Â PL/SQLÀÇ »ç¿ë¿¡ ÀÖ¾î¼ ¾ø¾î¼´Â ¾ÈµÉ Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. °£´ÜÇÑ ¹®Á¦ÀÎ °æ¿ì À͸íºí·°(Anonymous Block)À» »ç¿ëÇÏ¸é µÇÁö¸¸ ÀÚÁÖ»ç¿ëÇϰí Áß¿äÇÑ ±â´É¿¡ ´ëÇÏ¿©´Â ÇÁ·Î½ÃÀú³ª ÇÔ¼ö·Î ¸¸µé¾î ³õ°í »ç¿ëÇÏ´Â °ÍÀÌ º¸ÅëÀ̰í PL/SQL¿¡¼µµ ¿ª½Ã ÀÌ·¯ÇÑ ±â´ÉÀ» Á¦°øÇϰí ÀÖ´Ù. ƯÈ÷ C++ÀÇ Å¬·¡½º¿Í ºñ½ÁÇÑ ÆÐŰÁöµµ Á¦°øÇÑ´Ù. PL/SQL Tables and User-Defined Records
±× ¹Û¿¡ ¸¹ÀÌ »ç¿ëÇÏÁö´Â ¾ÊÁö¸¸ °æ¿ì¿¡ µû¶ó¼ À¯¿ëÇÑ ±â´ÉÀÌ ÀÖ´Ù. CÀÇ ¹è¿°ú ºñ½ÁÇÑ Å×À̺í ŸÀÔ°ú ±¸Á¶Ã¼¿Í ºñ½ÁÇÑ ·¹ÄÚµå ŸÀÔÀÌ ÀÖ´Ù.
±×·³ ¿¹Á¦¸¦ µé¾îº¸°Ú´Ù. Àß »ìÆìº¸°í Pro*C/C++¿¡¼ PL/SQLÀ» »ç¿ëÇÏ´Â ¹ýÀ» ÀÍÈ÷µµ·Ï Ç϶ó. ÀÌ ¿¹Á¦´Â Pro*C/C++¿¡¼ ÇϳªÀÇ ÇÁ·Î½ÃÀú¸¦ »ý¼ºÇÏ°í ±× ÇÁ·Î½ÃÀú¸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù. »ý¼ºÇÏ´Â ÇÁ·Î½ÃÀúÀÇ ³»¿ëÀº ºÎ¼ÀÇ ¹øÈ£¸¦ ÀԷ¹޾Ƽ ±× ºÎ¼ÀÇ Æò±Õ±Þ¿©, ÃÖ°í±Þ¿©, ÃÖÀú±Þ¿©¸¦ ±¸ÇØÁØ´Ù. ¸¸¾à ÇØ´ç ºÎ¼°¡ ¾ø´Â °æ¿ì³ª ÇÁ·Î½ÃÀú ¼öÇàÁß ¿À·ù°¡ ¹ß»ýÇßÀ» °æ¿ì¿¡´Â °¢°¢ÀÇ °ªµéÀº 0À¸·Î ¼ÂÆÃµÈ´Ù.
´ÙÀ½ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏ Çϱâ À§Çؼ´Â Pro*C/C++¸¦ ¼öÇàÇÒ ¶§ ¿É¼ÇÀ» ÁÖ¾î¾ß ÇÑ´Ù. $ proc mode=ansi parse=none sqlcheck=full userid=scott/tiger plsql.pc
ÁÖÀÇÇÒ °ÍÀº sqlcheck=full¿Í userid=scott/tiger¸¦ ¹Ýµå½Ã ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù.
/* --------------------------------------------------------------------------------
ÆÄÀÏ À̸§ : plsql.pc
°³¹ß ÀÏÀÚ : 2002-10-28
ÀÛ¼ºÀÚ : ·ù¸íȯ
-------------------------------------------------------------------------------- */
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
/*
* $ORACLE_HOME/precomp/public/sqlca.h ¸¦ Æ÷ÇÔÇØ ÁÖ±â À§Çؼ
*/
exec sql include sqlca;
/*
* È£½ºÆ® º¯¼ö ¼±¾ð
*/
exec sql begin declare section;
/*
* »ç¿ëÀÚ ID¿Í ÆÐ½º¿öµå
*/
char *username;
char *password;
/*
* DB¿Í ¿¬µ¿ÇÒ È£½ºÆ® º¯¼ö
*/
char deptno [128];
int avg_sal;
int max_sal;
int min_sal;
/*
* Indicator º¯¼ö
*/
short ind_deptno;
short ind_avg_sal;
short ind_max_sal;
short ind_min_sal;
exec sql end declare section;
/*
* SQL ¿¡·¯ ¹ß»ý½Ã ½ÇÇàÇÒ ÇÔ¼ö
* ¿¡·¯Äڵ带 ÇÁ¸°Æ® ÇÏ°í ·Ñ¹é ÈÄ¿¡ Á¢¼ÓÀ» Á¾·áÇÑ´Ù.
*/
void sql_error (void)
{
printf ("SQL Error Code : %d\n", sqlca.sqlcode);
printf ("SQL Error Message : %s\n", sqlca.sqlerrm.sqlerrmc);
exec sql whenever sqlerror continue;
exec sql rollback work release;
exit (EXIT_FAILURE);
}
/*
* ¸ÞÀÎ ÇÔ¼ö
*/
int main (int argc, char **argv)
{
username = (char *)strdup ("scott");
password = (char *)strdup ("tiger");
/*
* scott »ç¿ëÀÚ °èÁ¤À¸·Î Á¢¼Ó ½Ãµµ
* Á¢¼Ó ½Ãµµ ÈÄ¿¡ ¼º°ø ¿©ºÎ¸¦ À§ÇØ ¿¡·¯¸¦ °Ë»çÇÑ´Ù.
*/
exec sql
connect :username identified by :password;
if (sqlca.sqlcode != 0)
{
sql_error ();
}
printf ("Connected to Oracle Database\n");
/*
* DB¿¡ Procedure¸¦ »ý¼ºÇÑ´Ù.
* ProcedureÀÇ ³»¿ëÀº ºÎ¼¹øÈ£¸¦ ÀԷ¹޾Ƽ
* ±× ºÎ¼ÀÇ Æò±Õ±Þ¿©, ÃÖ°í±Þ¿©, ÃÖÀú±Þ¿©¸¦ ¾ò¾î¿Â´Ù.
*/
exec sql
create or replace
procedure dept_salary_info
(
p_deptno in dept.deptno%type, /* ºÎ¼¹øÈ£ */
p_salary_avg out number, /* Æò±Õ±Þ¿© */
p_salary_max out number, /* ÃÖ°í±Þ¿© */
p_salary_min out number /* ÃÖÀú±Þ¿© */
)
is
begin
/*
* ÇØ´ç ºÎ¼ÀÇ Æò±Õ±Þ¿©, ÃÖ°í±Þ¿©, ÃÖÀú±Þ¿©¸¦
* ±¸ÇÏ¿© Out Parameter º¯¼ö¿¡ ³Ö¾îÁØ´Ù.
*/
select round (avg (sal + nvl (comm, 0)), 0) average,
round (max (sal + nvl (comm, 0)), 0) maximum,
round (min (sal + nvl (comm, 0)), 0) minimum
into p_salary_avg,
p_salary_max,
p_salary_min
from emp
where deptno = p_deptno;
exception
/*
* ÇØ´ç ºÎ¼°¡ ¾ø´Â °æ¿ì
*/
when no_data_found then
p_salary_avg := 0;
p_salary_max := 0;
p_salary_min := 0;
/*
* ¾Ë ¼ö ¾ø´Â ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì
*/
when others then
p_salary_avg := 0;
p_salary_max := 0;
p_salary_min := 0;
end dept_salary_info;
end-exec;
if (sqlca.sqlcode != 0)
{
sql_error ();
}
printf ("Procedure created\n\n");
/*
* ºÎ¼¹øÈ£¸¦ ¾ò¾î¿Â´Ù.
*/
printf ("Deptno : ");
fgets (deptno, sizeof (deptno) - 1, stdin);
deptno [strlen (deptno) - 1] = '\0';
ind_deptno = 0;
/*
* À§¿¡¼ »ý¼ºÇÑ ÇÁ·Î½ÃÀú¸¦ È£ÃâÇÏ¿© ÀԷ¹ÞÀº
* ºÎ¼ÀÇ Æò±Õ±Þ¿©, ÃÖ°í±Þ¿©, ÃÖÀú±Þ¿©¸¦ ¾ò¾î¿Â´Ù.
*/
exec sql
execute
begin
dept_salary_info
(
:deptno:ind_deptno,
:avg_sal:ind_avg_sal,
:max_sal:ind_max_sal,
:min_sal:ind_min_sal
);
end;
end-exec;
if (sqlca.sqlcode != 0)
{
sql_error ();
}
/*
* °¢ °ªµéÀÌ NULL À̶ó¸é 0À¸·Î ¼ÂÆÃÇÑ´Ù.
*/
if (ind_avg_sal == -1) avg_sal = 0;
if (ind_max_sal == -1) max_sal = 0;
if (ind_min_sal == -1) min_sal = 0;
printf ("Average Salary : %d\n", avg_sal);
printf ("Maximum Salary : %d\n", max_sal);
printf ("Minimum Salary : %d\n", min_sal);
/*
* µ¥ÀÌÅͺ£À̽º¿Í Á¢¼ÓÀ» Á¾·áÇÑ´Ù.
*/
exec sql
rollback work release;
if (sqlca.sqlcode != 0)
{
sql_error ();
}
exit (EXIT_SUCCESS);
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|