|
Ô´´úÂëÍøÍÆ¼ö
Ò» Pro*C ³ÌÐò¸ÅÊö£º 1£®Ê²Ã´ÊÇPro*C³ÌÐò ÔÚORACLEÊý¾Ý¿â¹ÜÀíºÍϵͳÖУ¬ ÓÐÈýÖÖ·ÃÎÊÊý¾Ý¿âµÄ·½·¨£» £¨1£© ÓÃSQL*Plus£¬ ËüÓÐSQLÃüÁîÒÔ½»»¥µÄÓ¦ÓóÌÐò·ÃÎÊÊý¾Ý¿â£» £¨2£© ÓõÚËÄ´úÓïÑÔÓ¦Óÿª·¢¹¤¾ß¿ª·¢µÄÓ¦ÓóÌÐò·ÃÎÊÊý¾Ý¿â£¬ÕâЩ¹¤¾ßÓÐSQL*Froms£¬QL*Reportwriter,SQL*MenuµÈ£» £¨3£© ÀûÓÃÔÚµÚÈý´úÓïÑÔÄÚǶÈëµÄSQLÓïÑÔ»òORACLE¿âº¯Êýµ÷ÓÃÀ´·ÃÎÊ¡£ Pro*C¾ÍÊôÓÚµÚÈýÖÖ¿ª·¢¹¤¾ßÖ®Ò»£¬ Ëü°Ñ¹ý³Ì»¯ÓïÑÔCºÍ·Ç¹ý³Ì»¯ÓïÑÔSQL×îÍêÉÆµØ½áºÏÆðÀ´£¬ ¾ßÓÐÍ걸µÄ¹ý³Ì´¦ÀíÄÜÁ¦£¬ÓÖÄÜÍê³ÉÈκÎÊý¾Ý¿âµÄ´¦ÀíÆ·ÈÎÎñ£¬Ê¹Óû§¿ÉÒÔͨ¹ý±à³ÌÍê³É¸÷ÖÖÀàÐ͵ı¨±í¡£ÔÚPro*C³ÌÐòÖпÉÒÔǶÈëSQLÓïÑÔ£¬ ÀûÓÃÕâЩSQLÓïÑÔ¿ÉÒÔÍê³É¶¯Ì¬µØ½¨Á¢¡¢Ð޸ĺÍɾ³ýÊý¾Ý¿âÖÐµÄ±í£¬Ò²¿ÉÒÔ²éѯ¡¢²åÈë¡¢Ð޸ĺÍɾ³ýÊý¾Ý¿â±íÖеÄÐУ¬ »¹¿ÉÒÔʵÏÖÊÂÎñµÄÌá½»ºÍ»Ø¹ö¡£ ÔÚPro*C³ÌÐòÖл¹¿ÉÒÔǶÈëPL/SQL¿é£¬ ÒԸĽøÓ¦ÓóÌÐòµÄÐÔÄÜ£¬ ÌØ±ðÊÇÔÚÍøÂç»·¾³Ï£¬¿ÉÒÔ¼õÉÙÍøÂç´«ÊäºÍ´¦ÀíµÄ×Ü¿ªÏú¡£
2£®Pro*CµÄ³ÌÐò½á¹¹Í¼ ͨË×À´Ëµ£¬Pro*C³ÌÐòʵ¼ÊÊÇÄÚǶÓÐSQLÓï¾ä»òPL/SQL¿éµÄC³ÌÐò£¬ Òò´ËËüµÄ×é³ÉºÜÀàËÆC³ÌÐò¡£ µ«ÒòΪËüÄÚǶÓÐSQLÓï¾ä»òPL/SQL¿é£¬ ËùÒÔËü»¹º¬ÓÐÓëÖ®²»Í¬µÄ³É·Ý¡£ÎªÁËÈôó¼Ò¶ÔPro*CÓиö¸ÐÐÔµÄÈÏʶ£¬ ÌØ½«¶þÕß²î±ð±È½ÏÈçÏ£º CµÄÈ«³Ì±äÁ¿ËµÃ÷ CÔ´³ÌÐò º¯Êý1£ºÍ¬º¯ÊýK¡£ º¯Êý2£ºÍ¬º¯ÊýK¡£ CµÄ¾Ö²¿±äÁ¿ËµÃ÷ º¯ÊýK ¿ÉÖ´ÐÐÓï¾ä
Ó¦ÓóÌÐòÊײ¿ CµÄÍⲿ±äÁ¿ËµÃ÷ Íⲿ˵Ã÷¶Î£¨ORACLE±äÁ¿ËµÃ÷£© Í¨Ñ¶ÇøËµÃ÷
Pro*CÔ´³ÌÐò º¯Êý1£ºÍ¬º¯ÊýK¡£ º¯Êý2£ºÍ¬º¯ÊýK¡£ C¾Ö²¿±äÁ¿ËµÃ÷ ³ÌÐòÌå ÄÚ²¿ËµÃ÷²¿·Ö ÄÚ²¿ËµÃ÷¶Î Í¨Ñ¶ÇøËµÃ÷ º¯ÊýK CµÄ¿ÉÖ´ÐÐÓï¾ä ¿ÉÖ´ÐÐÓï¾ä SQLµÄ¿ÉÖ´ÐÐÓï¾ä »òPL/SQL¿é
¶þ£®Pro*C³ÌÐòµÄ×é³É½á¹¹
ÿһ¸öPro*C³ÌÐò¶¼°üÀ¨Á½²¿·Ö£º£¨1£©Ó¦ÓóÌÐòÊײ¿£»£¨2£©Ó¦ÓóÌÐòÌå Ó¦ÓóÌÐòÊײ¿¶¨ÒåÁËORACLEÊý¾Ý¿âµÄÓйرäÁ¿£¬ ΪÔÚCÓïÑÔÖвÙ×ÝORACLEÊý¾Ý¿â×öºÃÁË×¼±¸¡£Ó¦ÓóÌÐòÌå»ù±¾ÉÏÓÉPro*CµÄSQLÓï¾äµ÷ÓÃ×é³É¡£Ö÷ÒªÖ¸²éѯSELECT¡¢INSERT¡¢UPDATE¡¢DELETEµÈÓï¾ä¡£ Ó¦ÓóÌÐòµÄ×é³É½á¹¹ÈçͼËùʾ£º EXEC SQL BEGIN DECLARE SECTION £¨SQL±äÁ¿µÄ¶¨Ò壩EXEC SQL END DECLARE SECTION£» EXEC SQL INCLUDE SQLLA£» EXEC SQL CONNECT£º< Óû§Ãû> IDENTIFIED BY: < ¿ÚÁî > SQL Óï¾ä¼°ÓαêµÄʹÓÃ
1. Ó¦ÓóÌÐòÊײ¿ Ó¦ÓóÌÐòµÄÊײ¿¾ÍÊÇPro*CµÄ¿ªÊ¼²¿·Ö¡£Ëü°üÀ¨ÒÔÏÂÈý²¿·Ö£º l C±äÁ¿ÃèÊö²¿·Ö£» l SQL±äÁ¿ÃèÊö²¿·Ö£¨DECLARE²¿·Ö£©£» l SQLͨÐÅÇø¡£
(1) .DECLARE²¿·Ö£¨ÃèÊö²¿·Ö£© ÃèÊö²¿·Ö˵Ã÷³ÌÐòµÄSQL±äÁ¿£¬ ¶¨Ò岿·ÖÒÔEXEC SQL BEGIN DECLARE SECTION ;¿ªÊ¼ºÍÒÔ EXEC SQL END DECLARE SECTION £»½áÊøµÄ¡£Ëü¿ÉÒÔ³öÏÖÔÚ³ÌÐòµÄÖ÷²¿£¬Ò²¿É³öÏÖÔÚ¾Ö²¿ l SQL±äÁ¿µÄ˵Ã÷ºÍʹÓà ÔÚ˵Ã÷¶ÎÄÜΪSQL±äÁ¿Ö¸¶¨µÄÊý¾ÝÀàÐÍÈç±íËùʾ£º Êý¾ÝÀàÐÍ ÃèÊö CHARCHAR(n)INT SHORT LONG FLOAT DOUBLE VARCHAR µ¥×Ö·ûn¸ö×Ö·ûÊý×éÕûÊý¶ÌÕûÊýµ¥¾«¶È¸¡µãÊýË«¾«¶È¸¡µãÊý±ä³¤×Ö·û´® ÕâЩÊý¾ÝÀàÐÍʵ¼ÊÉϾÍÊÇCÓïÑÔµÄÊý¾ÝÀàÐÍ£¬ ÆäÖÐVARCHARÖÐÊÓΪCÊý¾ÝÀàÐ͵ÄÀ©³ä¡£ÕâÔÚÒÔºó»á̸µ½¡£ SQL±äÁ¿µÄʹÓÃӦעÒâÒÔϼ¸µã£º l ±ØÐëÔÚÃèÊö²¿·ÖÃ÷È·¶¨Òå l ±ØÐëʹÓÃÓëÆä¶¨ÒåÏàͬµÄ´óСд¸ñʽ l ÔÚSQLÓï¾äÖÐʹÓÃʱ£¬±ØÐëÔÚÆä֮ǰ¼ÓÒ»¸ö¡°£º¡±(ðºÅ)£¬µ«ÔÚCÓï¾äÖÐÒýÓÃʱ²»Ðè¼ÓðºÅ¡£ l ²»ÄÜÊÇSQLÃüÁîÖеı£Áô×Ö¡£ l ¿ÉÒÔ´øÖ¸Ê¾±äÁ¿¡£ ÀýÈ磺EXEC SQL BEGIN DECLARE SECTIONS; VARCHAR programe[30]; Int porgsal, pempno; EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT ENAME , SAL INTO: programe, : progsal FROM EMP WHERE EMPNO = : pempno;
(2). ָʾÆ÷±äÁ¿µÄ˵Ã÷ºÍÒýÓà ָʾ±äÁ¿Êµ¼ÊÉÏÒ²ÊÇÒ»ÀàSQL±äÁ¿,Ëü±»ÓÃÀ´¹ÜÀíÓëÆäÏà¹ØÁªµÄËÞÖ÷±äÁ¿£¨¼´ÔÚSQLÓï¾äÖÐ³ä µ±ÊäÈë»òÊä³öµÄ±äÁ¿£©¡£Ã¿Ò»¸öËÞÖ÷±äÁ¿¶¼¿É¶¨ÒåÒ»¸öָʾÆ÷±äÁ¿£¬Ö÷ÒªÓÃÓÚ´¦Àí¿ÕÖµ£¨NULL£© ָʾÆ÷±äÁ¿µÄ˵Ã÷»ù±¾Í¬Ò»°ãSQL±äÁ¿Ò»Ñù£¬ µ«±ØÐ붨Òå³É2×Ö½ÚµÄÕûÐÍ£¬ÈçSHORT¡¢INT¡£ÔÚSQLÓï¾äÖÐÒýÓÃʱ£¬ ÆäǰҲӦ¼Ó¡°£º¡±(ðºÅ)£¬¶øÇÒ±ØÐ븽ÔÚÆäÏà¹ØÁªµÄËÞÖ÷±äÁ¿Ö®ºó£¬ÔÚCÓï¾äÖУ¬¿É¶ÀÁ¢Ê¹Óᣵ±Ö¸Ê¾Æ÷±äÁ¿Îª-1ʱ£¬±íʾ¿ÕÖµ¡£ÀýÈ磺 EXEC SQL BEGIN DECLARE SECTION ; INT dept- number; SHORT ind num; CHAR emp name; EXEC SQL END DECLARE SECTION ;
Scanf(¡°90d %s¡±, & dept- number , dept name ); If (dept number ==0) Ind num = -1; Else Ind num = 0; EXEC SQL INSERT INTO DEPT (DEPTNO, DNAME) VALUES(:dept number : ind- num , :dept name); ÆäÖÐind numÊÇdept number µÄָʾÆ÷±äÁ¿¡£µ±ÊäÈëµÄdept number ÖµÊÇ0ʱ£¬ ÔòÏòDEPT ±íµÄDEPTNOÁвåÈë¿ÕÖµ¡£ £¨3£©.Ö¸ÕëSQL±äÁ¿µÄ˵Ã÷ºÍʹÓÃ
Ö¸ÕëSQL±äÁ¿ÔÚÒýÓÃǰҲ±ØÐëÔÚDECLARE ²¿·ÖÏÈ˵Ã÷¡£Æä˵Ã÷¸ñʽͬCÓïÑÔ¡£ÔÚSQLÓï¾äÖÐÒýÓÃʱ£¬Ö¸ÕëÃû×ÖǰҪ¼Óǰ׺¡°£º¡±£¨Ã°ºÅ£©¶ø²»¼Ó¡°*¡±£¨ÐǺţ©¡£ÔÚCÓï¾äÖÐÓ÷¨ÈçͬCÓïÑÔµÄÖ¸Õë±äÁ¿¡£ £¨4£©.Êý×éSQL±ä¸üµÄ˵Ã÷ºÍÒýÓà ÔÚSQLÓï¾äÖÐÒýÓÃÊý×éʱ£¬Ö»ÐèдÊý×éÃû£¨Ãû×Öǰ¼ÓðºÅ£©£¬ ²»Ðèдϱ꣬ÔÚCÓï¾äÖÐÓ÷¨ÈçͬCÓïÑÔµÄÊý×é±äÁ¿¡£ ʹÓÃÊý×é¿É´ó´ó½µµÍÍøÂç´«Ê俪Ïú¡£ÈçÒªÏòÒ»±í²åÈë100ÐÐÊý¾Ý£¬Èç¹ûûÓÐÊý×飬¾ÍÒªÖØ¸´100´Î£¬ ¶øÒýÓúó£¬Ö»ÐëÖ´ÐÐÒ»´ÎinsertÓï¾ä¡¢±ã¿ÉÒ»´ÎÐÔ²åÈë¡£ÀýÈ磺 EXEC SQL BEGIN DECLARE SECTION; Int emp_number[100]; Char emp_name[100][15]; Float salary[100],commission[100]; Int dept_number; EXEC SQL END DECLARE SECTION; ¡. EXEC SQL SELECT EMPNO,ENAME,SAL,COMM INTO :emp_number,:emp_name,:salary,:commission FROM EMP WHERE DEPTNO=:dept_number; ÔÚʹÓÃÊý×éʱ£¬Ó¦×¢ÒâÒÔϼ¸µã£» l ²»Ö§³ÖÖ¸ÕëÊý×é l Ö»Ö§³ÖһάÊý×飬 ¶ø emp-name [100][15]ÊÓΪһά×Ö·û´® l Êý×é×î´óάÊýΪ32767 l ÔÚÒ»ÌõSQLÓï¾äÖÐÒýÓöà¸öÊý×éʱ£¬ÕâЩÊý×éάÊýÓ¦Ïàͬ l ÔÚVALUES , SET, INTO »òWHERE×ÓÃûÖУ¬ ²»ÔÊÐí°Ñ¼òµ¥SQL±äÁ¿ÓëÊý×éSQL±äÁ¿»ìÓà l ²»ÄÜÔÚDELARE²¿·Ö³õʼ»¯Êý×é ÀýÈ磺ÏÂÃæµÄÒýÓÃÊÇ·Ç·¨µÄ EXEC SQL BEGIN DECLARE SECTION; Int dept num [3] = ; EXEC SQL END DECLARE SECTION ;
EXEC SQL SELECT EMPNO, ENAME , SAL INTO : emp num [ i ], : emp name [ i ], : salarg [ i ] FROM EMP (5) αÀàÐÍVARCHARµÄ˵Ã÷ºÍÒýÓà VARCHAR±äÁ¿ÔÚÒýÓÃ֮ǰҲ±ØÐëÔÚ˵Ã÷¶Î˵Ã÷£¬ ˵Ã÷ʱ±ØÐëÖ¸³ö´®µÄ×î´ó ³¤¶È£¬È磺 EXEC SQL BEGIN DECLARE SECTION£» Int book number; VARCHAR book name [ 50 ]; EXEC SQL END DECLARE SECTION ; ÔÚÔ¤±àÒïʱ£¬ book name ±»·Òë³ÉCÓïÑÔÖеÄÒ»¸ö½á¹¹±äÁ¿£» Struct { unsigned short len ; Unsigned chart arr [ 20 ] ; } boo name ÓÉ´Ë¿´³ö£¬ VARCHAR±äÁ¿Êµ¼ÊÉÏÊǺ¬³¤¶È³ÉÔ±ºÍÊý×é³ÉÔ±µÄ½á¹¹±äÁ¿¡£ÔÚSQLÓï¾äÖÐÒýÓÃʱ£¬Ó¦ÒýÓÃÒÔðºÅΪǰ׺µÄ½á¹¹Ãû£¬ ¶ø²»¼Óϱ꣬ÔÚCÓï¾ä ÖÐÒýÓýṹ³ÉÔ±¡£ VARCHAR±äÁ¿ÔÚ×÷Êä³ö±äÁ¿Ê±£¬ÓÉORACLE×Ô¶¯ÉèÖ㬠ÔÚ×÷ΪÊäÈë±äÁ¿Ê±£¬³ÌÐòÓ¦ÏȰÑ×Ö·û´®´æÈëÊý×é³ÉÔ±ÖУ¬ Æä³¤¶È´æÈ볤¶È³ÉÔ±ÖУ¬È»ºóÔÙÔÚSQLÓï¾äÖÐÒýÓá£ÀýÈ磺 Main( ) { ....... scanf(¡°90s, 90d¡¯, book name .arr, & book number ); book name .len = strlen (book name .arr); EXEC SQL UPDATE BOOK SET BNAME = : book name ; BDESC = : book number ; } (6) SQLͨÐÅÇø SQL ͨÐÅÇøÊÇÓÃÏÂÁÐÓï¾äÃèÊöµÄ£º EXEC SQL INCLUDE SQLCA£» ´Ë²¿·ÖÌṩÁËÓû§ÔËÐгÌÐòµÄ³É°Ü¼Ç¼ºÍ´íÎó´¦Àí¡£
SQLCAµÄ×é³É SQLCAÊÇÒ»¸ö½á¹¹ÀàÐ͵ıäÁ¿£¬ËüÊÇORACLE ºÍÓ¦ÓóÌÐòµÄÒ»¸ö½Ó¿Ú¡£ÔÚÖ´ÐÐ Pro*C³ÌÐòʱ£¬ ORACLE °Ñÿһ¸öǶÈëSQLÓï¾äÖ´ÐеÄ״̬ÐÅÏ¢´æÈëSQLCAÖУ¬ ¸ù¾ÝÕâЩÐÅÏ¢£¬¿ÉÅжÏSQLÓï¾äµÄÖ´ÐÐÊÇ·ñ³É¹¦£¬´¦ÀíµÄÐÐÊý£¬´íÎóÐÅÏ¢µÈ£¬Æä×é³ÉÈç±íËùʾ£º Struct sqlca { char sqlcaid [ 8 ] ; ----¨¤±êÊ¶Í¨Ñ¶Çø long sqlabc; ---¨¤ Í¨Ñ¶ÇøµÄ³¤¶È long sqlcode; ---¨¤±£Áô×î½üÖ´ÐеÄSQLÓï¾äµÄ״̬Âë struct { unsigned short sqlerrml; -----¨¤ÐÅÏ¢Îı¾³¤¶È }sqlerrm; char sqlerrp [ 8 ]; long sqlerrd [ 6 ]; char sqlwarn [ 8 ]; char sqlext [ 8 ]; } struct sqlca sqlca; ÆäÖУ¬ sqlcodeÔÚ³ÌÐòÖÐ×î³£Óõ½£¬Ëü±£ÁôÁË×î½üÖ´ÐеÄSQLÓï¾äµÄ״̬Âë¡£³ÌÐòÔ±¸ù¾ÝÕâЩ״̬Âë×ö³öÏàÓ¦µÄ´¦Àí¡£ÕâЩ״̬ÂëÖµÈçÏ£º 0: ±íʾ¸ÃSQLÓï¾ä±»ÕýÈ·Ö´ÐУ¬Ã»Óз¢Éú´íÎóºÍÀýÍâ¡£ >0:ORACLEÖ´ÐÐÁ˸ÃÓï¾ä£¬µ«Óöµ½Ò»¸öÀýÍ⣨ÈçûÕÒµ½ÈκÎÊý¾Ý£©¡£
<0:±íʾÓÉÓÚÊý¾Ý¿â¡¢ÏµÍ³¡¢ÍøÂç»òÓ¦ÓóÌÐòµÄ´íÎó£¬ORACLEδִÐиÃSQLÓï¾ä¡£ µ±³öÏÖ´ËÀà´íÎóʱ£¬µ±Ç°ÊÂÎñÒ»°ãÓ¦»Ø¹ö¡£ 2£®Ó¦ÓóÌÐòÌå ÔÚPro*C³ÌÐòÖУ¬ ÄܰÑSQLÓï¾äºÍCÓï¾ä×ÔÓɵػìºÏÊéд£¬²¢ÄÜÔÚSQLÓï¾äÖÐʹÓÃSQL±äÁ¿£¬Ç¶ÈëʽSQLÓï¾äµÄÊéдÎÄ·¨ÊÇ£º l ÒԹؼü×ÖEXEC SQL¿ªÊ¼ l ÒÔCÓïÑÔµÄÓï¾äÖÕ½á·û£¨·ÖºÅ£©ÖÕ½á SQLÓï¾äµÄ×÷ÓÃÖ÷ÒªÓÃÓÚͬÊý¾Ý¿â´ò½»µÀ¡£CÓïÑÔ³ÌÐòÓÃÓÚ¿ØÖÆ£¬ÊäÈ룬Êä³öºÍÊý¾Ý´¦ÀíµÈ¡£ £¨1£© Á¬½Óµ½ORACLEÊý¾Ý¿â ÔÚ¶ÔÊý¾Ý¿â´æÈ¡Ö®Ç°£¬±ØÐëÏȰѳÌÐòÓëORACLEÊý¾Ý¿âÁ¬½ÓÆðÀ´¡£¼´µÇ¼µ½ORACLEÉÏ¡£ËùÁ¬½ÓÃüÁîÓ¦¸ÃÊÇÓ¦ÓóÌÐòµÄµÚÒ»¸ö¿ÉÖ´ÐÐÃüÁî¡£Á¬½ÓÃüÁî¸ñʽÈçÏ£º EXEC SQL CONNECT£º< Óû§Ãû > IDENTIFIED BY : < ¿ÚÁî > »òEXEC SQL CONNECT£º < Óû§Ãû > / < ¿ÚÁî > ÔÚʹÓÃÉÏÊöÁ½ÖÖ¸ñʽ½øÐеÇÈëʱ£¬ Ó¦µ±Ê×ÏÈÔÚ˵Ã÷¶Î¶¨Òå°üº¬Óû§ÃûºÍ¿ÚÁîµÄ SQL ±äÁ¿£¬²¢ÔÚÖ´ÐÐCONNECT֮ǰÉèÖÃËüÃÇ£¬·ñÔò»áÔì³ÉµÇ¼ʧ°Ü¡£ÀýÈ磺 EXEC SQL BEGIN DECLARE SECTION £» VARCHAR usename [20]; VARCHAR password[20]; EXEC SQL END DECLARE .......... strcpy ( usename.arr, ¡°CSOTT¡¯); usename.len = strlen (username.arr); strcpy (password.arr , ¡°TIGER¡¯); password .len = strlen( password .arr); EXEC SQL WHENEVER SQLERROR GOTO SQLERR; EXEC SQL CONNECT :username INDNTIFIED BY : password; ×¢Òâ: ²»ÄܰÑÓû§ÃûºÍ¿ÚÁîÖ±½Ó±àдµ½CONNECTÓï¾äÖУ¬»òÕß°ÑÓÃÒýºÅ£¨¡¯£©À¨ÆðÀ´µÄ×Öĸ´®ÔÚCONNECT Óï¾äÖУ¬ ÈçÏÂÃæµÄÓï¾äÊÇÎÞЧµÄ¡£ EXEC SQL CONNECT SCOTT INENTIFIED BY TIGER; EXEC SQL CONNECT ¡®SCOTT¡¯ IDENTIFIED BY ¡®TIGER¡¯; (2). ²åÈë¡¢¸üкÍɾ³ý ÔÚ½²ÊöSQLÓïÑÔʱÒÑÏêϸ½²¹ý£¬ ÕâÀï¾Í²»¾ÙÀý˵Ã÷ÁË¡£ (3). Êý¾Ý¿â²éѯ¼°ÓαêµÄʹÓà ÔÚPRO*CÖÐ, ²éѯ¿É·ÖΪÁ½ÖÖÀàÐÍ: l ·µ»Øµ¥Ðлò¶¨ÐÐÊýµÄ²éѯ; l ·µ»Ø¶àÐеIJéѯ.´ËÖÖ²éѯҪÇóʹÓÃÓαêÀ´¿ØÖÆÃ¿Ò»Ðлòÿһ×飨Ö÷±äÁ¿ÓÃÊý×飩. 1) ·µ»Øµ¥Ðлò¶¨ÐÐÊýµÄ²éѯ ÔÚPRO*CÖеIJéѯSQL SELECTÓï¾äÓÉÒÔϼ¸¸ö×Ó¾ä×é³É: SELECT INTO FROM WHERE CONNECT BY UNION INTERSECT MINUS GROUP BY HAVING ORDER BY ÆäÖÐWHERE×Ó¾äÖеIJéѯÌõ¼þ¿ÉÒÔÊÇÒ»¸öÊôÐÔ»ò¶à¸öÊôÐԵļ¯ºÏ,ÔÚÖ´ÐÐÊǸ³ÖµµÄÖ÷±äÁ¿Ò²¿É·ÅÔÚWHERE×Ó¾äÖÐ.WHERE×Ó¾äÖÐËùÓõÄÖ÷±äÁ¿³ÆÎªÊäÈëÖ÷±äÁ¿¡£È磺
SELECT EMPNO, JOB, SAL INTO:PNAME, :PJOB, :PSAL FROM EMP WHERE EMPNO=:PEMPNO; ÈôûÓÐÕÒµ½ÏÞ¶¨µÄÐÐ, ÔòSQLCA.SQLCODE·µ»Ø¡±+1403¡±, ±íÃ÷¡±Ã»ÓÐÕÒµ½¡±¡£ INTO´Ó¾äÖеÄÖ÷±äÁ¿½ÐÊä³öÖ÷±äÁ¿£¬ËüÌṩÁ˲éѯʱËùÐèÒªµÄÐÅÏ¢¡£ ÔÚÈκÎÏîË͸øÖ÷±äÁ¿Ö®Ç°£¬¶¼ÒªÇóORACLE°ÑÕâЩÏîת»»³ÉÖ÷±äÁ¿µÄÊý¾ÝÀàÐÍ¡£¶ÔÓÚÊý×ÖÊÇͨ¹ý½Ø¶ÏÀ´Íê³ÉµÄ£¨È磺9.23ת»»Îª9£©¡£ Èç¹ûÒÑÈ·¶¨²éѯֻ·µ»ØÒ»ÐУ¬ÄÇô¾Í²»±ØÊ¹ÓÃÓαֻ꣬¸øSELECTÓï¾äÔö¼ÓÒ»¸öINTO×Ӿ伴¿É¡£ÔÚÓïÒåÉÏINTOÓï¾äÔÚFROM֮ǰµÄ²éѯÖÐÓжàÉÙ¸öÑ¡ÔñÏî¾ÍÓжàÉÙ¸öÊä³öÖ÷±äÁ¿¡£ÈôÔÚSELECTÏîÖбí´ïʽµÄÊýÄ¿²»µÈÓÚINTO×Ó¾äÖÐÖ÷±äÁ¿µÄÊýÄ¿£¬¾Í°ÑSQLCA.SQLWARN[3]ÖÃΪ¡±W¡±¡£ 2£©¶àÐвéѯ¼°ÓαêµÄʹÓà Èç¹û²éѯ·µ»Ø¶àÐлò²»ÖªµÀ·µ»Ø¶àÉÙÐУ¬Ê¹ÓôøÓÐORACLEÓα꣨CURSOR£©µÄSELECTÓï¾ä¡£ ÓαêÊÇORACLEºÍPRO*C´æ·Å²éѯ½á¹ûµÄ¹¤×÷ÇøÓò¡£Ò»¸öÓα꣨ÒÑÃüÃûµÄ£©ÓëÒ»ÌõSELECTÓï¾äÏà¹ØÁª¡£²Ù×÷ÓαêÓÐÓÉ4ÌõÃüÁ£¨1£©DECLARE CURSOR£»£¨2£©OPEN CURSOR£»£¨3£©FETCH£»£¨4£©CLOSE CURSOR¡£
A. ¶¨ÒåÓαê Ò»¸öÓÎ±ê±ØÐëÊ×Ïȶ¨Ò壬 ²ÅÄÜʹÓÃËü¡£Ó﷨Ϊ£º EXEC SQL DECLARE ¡´ÓαêÃû¡µCORSOR FOR SELECT ¡´ÁСµ FROM ¡´±í¡µ ÀýÈ磺 EXEC SQL DECLARE CSOR£¬ CURSOR FOR
×ªÔØÍøÉϵÄһƪÎÄÕÂÖ§³Öһϡ£ PROCÊÇORACLEÊý¾Ý¿âÌṩµÄ±à³Ì½Ó¿ÚÖ®Ò»£¬ÆäÓ¦ÓÃÊ®·ÖµÄ¹ã·º£¬±¾ÎÄͨ¹ýÒ»¸ö¾ßÌåµÄÀý×Ó£¬½éÉÜPROC±à³ÌµÄһЩ¾Ñ鼰ӦעÒâµÄµØ·½¡£ Àý×Ó³ÌÐò£º #include #include #include #include #include
EXEC SQL INCLUDE sqlca; /*RELEASE_CURSOR=YES ʹPROC ÔÚÖ´ÐÐÍêºóÊÍ·ÅÓëǶÈëSQLÓйØ×ÊÔ´*/ EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL BEGIN DECLARE SECTION; varchar vc_user[20]; long al_empno=0; char ac_ename[11]=""; char ac_hiredate[20]=""; double af_sal=0;
EXEC SQL VAR ac_ename IS STRING(11); EXEC SQL VAR ac_hiredate IS STRING(20);
EXEC SQL END DECLARE SECTION;
/*´íÎó´¦Àíº¯Êý*/ void sql_error(char *msg) { printf("
%s,%ld,%s
", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK RELEASE; exit(-1); }
main() { EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");
/*Á¬½ÓÊý¾Ý¿â*/ strcpy(vc_user.arr,"scott/tiger@DEMO"); vc_user.len=16; exec sql connect :vc_user;
EXEC SQL DECLARE cur_emp CURSOR FOR SELECT EMPNO, ENAME,to_char(HIREDATE,"yyyy/mm/dd hh24:mi:ss"),SAL FROM EMP;
EXEC SQL OPEN cur_emp; while(1) { al_empno=0; strcpy(ac_ename,""); strcpy(ac_hiredate,""); af_sal=0; EXEC SQL FETCH cur_emp INTO :al_empno, :ac_ename:ename_ind, :ac_hiredate:hiredate_ind, :af_sal:sal_ind; if( sqlca.sqlcode == 1403) { break; } printf("empno=%ld,ename=%s,hiredate=%s,sal=%lf
",al_empno,ac_ename,ac_hiredate,af_sal); } EXEC SQL CLOSE cur_emp; EXEC SQL ROLLBACK WORK RELEASE; }
1¡¢ËÞÖ÷±äÁ¿µÄÉùÃ÷ ÔÚPROCÖÐ,ÔÚSQLÓï¾äÖÐÓõ½µÄ±äÁ¿³ÆÎªËÞÖ÷±äÁ¿¡£ËûÃÇÓ¦ÔÚEXEC SQL BEGIN DECLARE SECTION;ÓëEXEC SQL EDN DECLARE SECTION; Ö®¼äÉùÃ÷£¬ÈçÉÏÃæËùʾ.ÔÚÉùÃ÷ËÞÖ÷±äÁ¿Ê±Ó¦×¢ÒâÒÔϼ¸µã£º (1) ÔÚÊý¾Ý¿â±íÖж¨ÒåΪVARCHAR2£¬VARCHAR£¬CHARµÄ×ֶΣ¬ÔÚPROCÖпÉÉùÃ÷ΪCHAR£¬µ«³¤¶ÈӦΪËüÃÇÔÚ±íÖж¨ÒåµÄ³¤¶È¼Ó1£¬ÒòΪPROCÖÐ CHARÐͱäÁ¿ÓÃ×ö½áβ¡£ È磺ENAMEÔÚ±íÖе͍ÒåΪename varchar2(10)£¬ÔÚPROCÖпɶ¨ÒåΪ£º EXEC SQL BEGIN DECLARE SECTION; char ename[11]; EXEC SQL END DECLARE SECTION; ³£¼û´íÎó˵Ã÷: Èç¹û²åÈëµÄ×Ö·û´®³¤¶È´óÓÚ10£¬È磺EXEC SQL INSERT INTO EMP(ENAME) VALUES("12345678901");»á³öÏÖÒÔÏ´íÎó: error:ORA-01480: STR ¸³Öµ±äÁ¿È±ÉÙ¿Õºó׺¡£
Èç¹û¶¨ÒåΪ: EXEC SQL BEGIN DECLARE SECTION; char ename[15]; EXEC SQL END DECLARE SECTION;
µ±²åÈëµÄ×Ö·û´®³¤¶È´óÓÚ10£¬Ð¡ÓÚ15ʱ,È磺EXEC SQL INSERT INTO EMP(ENAME) VALUES("12345678901");»á³öÏÖÒÔÏ´íÎó: error:ORA-01401: ²åÈëµÄÖµ¶ÔÓÚÁйý´ó¡£ µ±²åÈëµÄ×Ö·û´®³¤¶È´óÓÚ15£¬È磺EXEC SQL INSERT INTO EMP(ENAME) VALUES("12345678901234");»á³öÏÖÒÔÏ´íÎó: error:ORA-01401:STR ¸³Öµ±äÁ¿È±ÉÙ¿Õºó׺¡£
(2) ´ÓSQLÓï¾äÖÐÈ¡×ֶεÄÖµµ½ËÞÖ÷±äÁ¿ÖÐʱ£¬PROC²»»á×Ô¶¯¸øËÞÖ÷±äÁ¿È¥µôÓÒ¿Õ¸ñ¡£¶øÊÇÒÔÔÚDECLARE SECTION Öж¨ÒåµÄ³¤¶ÈΪ׼(Óë ±íÖж¨ÒåµÄÎÞ¹Ø)²»×ã²¹ÓÒ¿Õ¸ñ.Èç¹û²»×¢ÒâÕâÒ»µã£¬ÔÚPROCÖнøÐÐ×Ö·û´®²Ù×÷ʱ£¨Èç±È½ÏÏàµÈ£©»á³ö´í¡£Èç: EXEC SQL BEGIN DECLARE SECTION; char ename[10]; EXEC SQL END DECLARE SECTION; Èç¹ûENAMEÔÚ±íÖеÄֵΪ"abc",ÔòÈ¡³öµÄֵΪ"abc ";
¿ÉÓÃÓï¾äEXEC SQL VARÖØ¶¨ÒåCHARÐͱäÁ¿¡£ÕâÑùËÞÖ÷±äÁ¿»á×Ô¶¯È¥µôÓÒ¿Õ¸ñ¡£ÈçÏÂ: EXEC SQL BEGIN DECLARE SECTION; char ename[11]; EXEC SQL VAR ac_ename IS STRING(11); EXEC SQL END DECLARE SECTION; Èç¹ûENAMEÔÚ±íÖеÄֵΪ"abc",ÔòÈ¡³öµÄֵΪ"abc";
(3) ¶Ô¸¡µãÐ͵ıäÁ¿£¬Îª±£Ö¤¾«¶È£¬×îºÃÊÇÉùÃ÷³ÉDOUBLEÐ͵Ä.ÒòΪDOUBLEÐ͵ľ«¶È±ÈFLOATÐ͸ߺܶà. (4) ÕûÐÍ¿ÉÉùÃ÷ΪLONGÐÍ(¶Ô½Ï³¤µÄÕûÐÍ,¶øÇÒËùÓÃµÄÆ½Ì¨Ö§³ÖµÄ»°,ÈçÔÚSUNƽ̨ÉÏ,¿ÉÉùÃ÷ΪLONG LONGÐÍ). (5) DATEÐ͵Ĵ¦Àí£ºDATEÐÍÒ»°ãÉùÃ÷ΪCHAR(20)¡£ Íù±íÖвåÈëDATEÐÍÊý¾Ýʱ,Ò»°ãÓÃTO_DATE()º¯Êý½øÐÐÀàÐÍת»»,È¡³öֵʱһ°ãÓÃTO_CHAR()º¯Êý½øÐÐÀàÐÍת»». EXEC SQL select to_char(hiredate,"yyyy/mm/dd hh24:mi:ss") into :ac_hire_date from EMP where empno=1234; EXEC SQL insert into EMP(EMPNO,HIREDATE) values(123,to_date(:ac_hiredate,"yyyy/mm/dd hh24:mi:ss");
2¡¢ËÞÖ÷±äÁ¿µÄ×÷Ó÷¶Î§ Èç¹ûËÞÖ÷±äÁ¿ÔÚËùÓеĺ¯ÊýÖ®ÍâÉùÃ÷£¬ÔòËûÃÇÊÇÈ«¾Ö±äÁ¿¡£ÔÚʹÓÃ֮ǰҪעÒâ°Ñ±äÁ¿µÄÖµ³õʼ»¯£¬ËÞÖ÷±äÁ¿Ò²¿ÉÒÔÔÚij¸öº¯ÊýµÄÄÚ²¿¶¨Òå¡£ ÕâʱËûÃÇÊǾֲ¿±äÁ¿¡£Ò»°ã¶¼Ï°¹ß°ÑËÞÖ÷±äÁ¿ÉùÃ÷Ϊȫ¾Ö±äÁ¿¡£
3¡¢Êý¾Ý¿âµÄÁ¬½ÓÓë¶Ï¿ª Êý¾Ý¿âµÄÁ¬½ÓÓÐÒÔÏÂÁ½ÖÖ·½·¨£º (1) strcpy(vc_user.arr,"scott/tiger"); vc_user.len=11; exec sql connect :vc_user; (2) strcpy(user,"scott"); strcpy(pass,"tiger"); exec sql connect :user identified by :pass; ×¢Ò⣺ÔÚÓÐЩƽ̨ÉÏÁ½ÖÖ¶¼¿ÉÒÔ,ÔÚÓÐЩƽ̨ÉÏÖ»ÄÜÓõÚÒ»ÖÖ·½·¨. ÔÚPROC³ÌÐòÖУ¬Òª¼ÇסÓÃEXEC SQL ROLLBACK WORK RELEASE;¶Ï¿ªÓëÊý¾Ý¿âµÄÁ¬½Ó,²¢ÊÍ·ÅÏà¹ØµÄÊý¾Ý¿â×ÊÔ´¡£
4¡¢PROCÖеÄNULLÖµµÄ´¦Àí Èç¹ûijһ×Ö¶ÎÈ¡³öµÄÖµÊÇNULL,»á±¨:sqlcode=-1405, sqlerr=ORA-01405: ¶ÁÈ¡µÄÁÐֵΪ NULL ²¢ÇÒÏàÓ¦µÄËÞÖ÷±äÁ¿µÄÖµ²»»á±»¸Ä±ä,ΪִÐиÃSQLÓï¾ä֮ǰµÄÖµ. ³£ÓõĴ¦ÀíNULLÖµµÄ·½·¨ÓУº (1)²ÉÓÃָʾÆ÷±äÁ¿,´Ëʱ²»»áÓÐ-1405´íÎó,µ±±ØÐëÊÇËùÒÔΪNULLµÄ×ֶζ¼ÓÐÏàÓ¦µÄָʾÆ÷±äÁ¿,Èç¹ûijһ×Ö¶ÎûÓÐָʾÆ÷±äÁ¿,µ«È¡³öµÄÖµ ΪNULLÖµ,ÔòÈÔÈ»»áÓÐ-1405´íÎó.µ±È¡³öµÄÖµÊÇNULLʱ£¬ÏàÓ¦µÄָʾÆ÷±äÁ¿±äÁ¿Îª-1£¬¿É¸ù¾ÝָʾÆ÷±äÁ¿µÄÖµ×öÏìÓ¦µÄ´¦Àí¡£ (2)Èç¹û×ֶν϶à,¿ÉÈ¡×ֶε½Ò»¸ö½á¹¹ÌåÖм°Óë¸Ã½á¹¹Ìå¶ÔÓ¦µÄָʾÆ÷½á¹¹ÌåÖÐ.ÈçÉÏÃæµÄÀý×ÓÖпɶ¨Òå½á¹¹Ì壺 struct str_emp{ long al_empno; char ac_ename; char ac_hiredate; double af_sal; }; struct str_emp_ind{ long al_empno; char ac_ename; char ac_hiredate; double af_sal; };
struct str_emp str_emp; strcut str_emp_ind str_emp_ind; ÔÚȡ֮ǰ¿ÉÓÃmemset(&str_emp,0,sizeof(str_emp)).Çå¿Õ¸Ã½á¹¹Ìå,ÕâÑùÈç¹ûÊÇ×Ö·ûÐ͵ÄNULL,»áΪ"",ÕûÐ͵ÄNULL»áΪ0, ¸¡µãÐ͵ĻáΪ0.00¡£´Ëʱ²»»áÓÐ-1405´íÎó¡£ (3)Ò²¿É²ÉÓÃNVL()º¯Êý:¾ÙÀýÈçÏ£º EXEC SQL DECLARE authors CURSOR FOR SELECT EMPNO, NVL(ENAME,chr(0)),nvl(to_char(HIREDATE,"yyyy/mm/dd hh24:mi:ss"),chr(0)),NVL(SAL,0) FROM EMP; ÕâÑùÒ²²»»áÓÐ-1405´íÎó²»,µ±È¡³öµÄÖµÊÇNULLʱ,×Ô¶¯ÓÃNVL()ÖÐÖ¸¶¨µÄÖµ´úÌæ. CHR(0)Ò²¿ÉÖ±½ÓÓÃ""´úÌæ,ÈçÏÂ: SELECT EMPNO, NVL(ENAME,""),nvl(to_char(HIREDATE,"yyyy/mm/dd hh24:mi:ss"),""),NVL(SAL,0) FROM EMP;5¡¢PROCÖеĴíÎóµÄ´¦Àí ËùÓеÄSQLÓï¾ä¶¼ÓпÉÄܳö´í.ËùÒÔ¶¼Òª¼ÓÒÔÅжÏ,µ«Ã¿¸öSQLÓï¾äºó¶¼¼Ó´íÎóÅжÏ,Ì«Âé·³,¿ÉÓÃÒ»¸öº¯ÊýÈçsql_error()À´½øÐдíÎó´¦Àí, ·½·¨: (1)¶¨Òåql_error()º¯Êý¡£ (2)ÔÚ¿ªÍ·¼ÓÉÏEXEC SQL WHENEVER SQLERROR DO sql_error();ÕâÑùµ±·¢Éúsqlca.sqlcode <0 µÄ´íÎóʱ,³ÌÐò×Ô¶¯×ªµ½sql_error()ÖÐÖ´ÐÐ. ×¢Òâ:¶Ôsqlca.sqlcode >0µÄ´íÎóÈç sqlca.sqlcode =1403 ÊDz»»áתµ½sql_error()ÖÐÖ´ÐеÄ. ÁíÍâ:ÔÚUNIXÏ£¬¿ÉÒÔÓÃOERR À´²éÕÒ´íÎóµÄÃèÊö¡£È磺 ora ORA -1405 ²éÕÒ´íÎóºÅΪ-1405µÄÃèÊö.
6¡¢PROCÖе÷Óô洢¹ý³ÌµÄ·½·¨ Òª°Ñ´æ´¢¹ý³Ì·ÅÔÚEXEC SQL EXECUTE ºÍ END-EXEC;Ö®¼ä£¬ÈçÏÂËùʾ£º ÆäÖУºal_empno,ac_ename ΪÊäÈë²ÎÊý,l_return,l_errno,c_errtext ΪÊä³ö²ÎÊý¡£ al_empno=8888; strcpy(ac_ename,"ABCD"); EXEC SQL EXECUTE BEGIN up_db_emp(:al_empno,:ac_ename,:l_return,:l_errno,:c_errtext); END; END-EXEC; if (l_return != 0) { printf("µ÷ÓÃUP_PB_EMP´æ´¢¹ý³Ì³ö´í,errno=%ld,errtext=%s
",l_errno,c_errtext); }
7¡¢PROCµÄÃüÁîÐÐÑ¡ÏPROC±àÒëÆ÷ÓкܶàµÄÃüÁîÐÐÑ¡ÏÔÚÃüÁîÐÐÏÂÖ±½Ó²»´ø²ÎÊýÔËÐÐPROC£¬»áÁгöËùÓеÄÃüÁîÐÐÑ¡ÏîÀ´£¬²¢ÓÐ˵Ã÷¡£ (1)´¢´æ¹ý³Ì:±àÒë´¢´æ¹ý³ÌÊÇÒª´øÉÏÓû§Ãû¼°ÃÜÂë proc USERID=scott/tiger sqlcheck=SEMANTICS ireclen=512 iname=test.cpp (2)PARSE=NONE ¶Ô·ÇSQL´úÂë²»½øÐÐÓï·¨·ÖÎö£¬Ä¬È϶ԷÇSQL´úÂëÒ²½øÐÐÓï·¨·ÖÎö. ÔÚRED HAD6.3ÉϵÄORACLE8.1.5ÖÐÓÃPROCʱ,»áÌáʾ:/USR/INCLUDE/STDIO.H ¼°ÆäËûµÄ.HÎļþÖÐÓдí. ¿É°ÑPARSE=NONE¼ÓÉÏ,¾ÍºÃÁË. 8¡¢×¢Òâ¼ÓÉÏ£ºEXEC ORACLE OPTION (RELEASE_CURSOR = YES); RELEASE_CURSOR=YES ʹPROC ÔÚÖ´ÐÐÍêºóÊÍ·ÅÓëǶÈëSQLÓйØ×ÊÔ´£¬±£Ö¤ÔÚ¸ÃPROC³ÌÐòÖ´ÐÐÍêºó£¬ORACLE²»»áËø×¡Êý¾Ý¿â×ÊÔ´£¬ÈçËø±íµÈ¡£ Èç¹ûÔÚPROCÖÐÓõ½ORACA£¬»¹ÒªÔÚ³ÌÐòÍ·¼ÓÉÏ£º EXEC ORACLE OPTION (ORACA=YES);
9¡¢PROCÖеÄÀàÐÍת»» Ò»¡¢ÔÚCÓïÑÔÖÐ: (1)×Ö·ûÐ͵½ÕûÐÍ¿ÉÓÃATOI() ATOL(),SSCANF() (2)ÕûÐÍ,¸¡µãÐ͵½×Ö·ûÐÍ,¿ÉÓÃSPRINTF() (3)×Ö·ûÐ͵½¸¡µãÐÍÓÃATOF()²»ÐÐ,×îºÃÓÃSSCANF(),¾ÙÀýÈçÏÂ:
EXEC SQL BEGIN DECLARE SECTION; double d_demo; float f_demo; char ac_text[20]="222"; EXEC SQL END DECLARE SECTION;
(1)sscanf(ac_text, "%f", &d_demo); printf("ac_text=%s,d_demo=%f
",ac_text,d_demo);
(2)sscanf(ac_text, "%lf", &d_demo); printf("ac_text=%s,d_demo=%f
",ac_text,d_demo);
(3)sscanf(ac_text, "%f", &d_demo); printf("ac_text=%s,d_demo=%lf
",ac_text,d_demo);
(4)sscanf(ac_text, "%lf", &d_demo); printf("ac_text=%s,d_demo=%lf
",ac_text,d_demo);
printf("*******************
"); (5)sscanf(ac_text, "%f", &f_demo); printf("ac_text=%s,f_demo=%f
",ac_text,f_demo);
(6)sscanf(ac_text, "%lf", &f_demo); printf("ac_text=%s,f_demo=%f
",ac_text,f_demo);
(7)sscanf(ac_text, "%f", &f_demo); printf("ac_text=%s,f_demo=%lf
",ac_text,f_demo);
(8)sscanf(ac_text, "%lf", &f_demo); printf("ac_text=%s,f_demo=%lf
",ac_text,f_demo);
Êä³öµÄ½á¹û: ac_text=222.00,d_demo=0.000000 ac_text=222.00,d_demo=222.000000 ac_text=222.00,d_demo=222.000032 ac_text=222.00,d_demo=222.000000 ******************* ac_text=222.00,f_demo=222.000000 ac_text=222.00,f_demo=0.000000 ac_text=222.00,f_demo=222.000000 ac_text=222.00,f_demo=0.000000 d_demo=atof(ac_text); printf("ac_text=%s,atof(ac_text)=%f
",ac_text,d_demo);
d_demo=atof(ac_text); printf("ac_text=%s,atof(ac_text)=%lf
",ac_text,d_demo);
f_demo=atof(ac_text); printf("ac_text=%s,atof(ac_text)=%f
",ac_text,f_demo);
f_demo=atof(ac_text); printf("ac_text=%s,atof(ac_text)=%lf
",ac_text,f_demo);
Êä³öµÄ½á¹û: ac_text=222.00,atof(ac_text)=1243288.000000 ac_text=222.00,atof(ac_text)=1243288.000000 ac_text=222.00,atof(ac_text)=1243288.000000 ac_text=222.00,atof(ac_text)=1243288.000000
´ÓÉÏÃæµÄ½á¹û¿É¼û: DOUBLEÐÍÓ¦²ÉÓÃsscanf(ac_app_capcity, "%lf", &d_app); ´òÓ¡ÓÃ"%lf","%f" ¶¼¿ÉÒÔ. (2),(4)ÕýÈ· FLOATÐÍÓ¦²ÉÓÃsscanf(ac_app_capcity, "%f", &d_app); ´òÓ¡ÓÃ"%lf","%f" ¶¼¿ÉÒÔ. (5),(7)ÕýÈ· ²ÉÓÃATOF()ת»»µÄ½á¹û¶¼ÊÇ´íµÄ,ËùÒÔ²»ÒªÓÃËü¡£ ¶þ¡¢Ð´±í»ò´Ó±íÖÐÈ¡Êý¾Ýʱ: (1)×Ö·ûÐÍÓëÕûÐÍÖ®¼ä¿É²»ÓÃת»»,²ÉÓÃĬÈÏ·½Ê½¡£ (2)×Ö·ûÐÍÓ븡µãÐÍÖ®¼ä¿É²»ÓÃת»»,²ÉÓÃĬÈÏ·½Ê½¡£ (3)ÈÕÆÚÐÍÓë×Ö·ûÐÍÖ®¼ä¿ÉÓÃTO_CHAR(),TO_DATE()¡£
10¡¢PROCÖеÄ4ÖÖ¶¯Ì¬SQL¼ò½é (1)¶¯Ì¬SQL1: ²»ÄÜÊDzéѯ(SELECT)Óï¾ä,²¢ÇÒûÓÐËÞÖ÷±äÁ¿. Ó÷¨:Æ´Ò»´®¶¯Ì¬SQLÓï¾ä,²¢ÓÃEXECUTE IMMEDIATEÖ´ÐÐ,Èç: EXEC SQL EXECUTE IMMEDIATE "CREATE TABLE dyn1 (col1 VARCHAR2(4))";
(2)¶¯Ì¬SQL2: ²»ÄÜÊDzéѯ(SELECT)Óï¾ä,²¢ÇÒÊäÈëµÄËÞÖ÷±äÁ¿ÊýÄ¿ÊÇÖªµÀµÄ, Ó÷¨:Æ´Ò»´®¶¯Ì¬SQLÓï¾ä,ÓÃPREPARE,EXECUTEÓï¾äÖ´ÐÐ. strcpy(c_sql, "DELETE FROM EMP WHERE EMPNO = :?"); EXEC SQL PREPARE sql_stmt FROM :c_sql; EXEC SQL EXECUTE sql_stmt USING :emp_number;
(3)¶¯Ì¬SQL3: ÓÃÓÚ´´½¨¶¯Ì¬²éѯ, ²¢ÇÒÒª²éѯµÄ×ֶμ°ÊäÈëµÄËÞÖ÷±äÁ¿ÊýÄ¿ÊÇÖªµÀµÄ Ó÷¨: Æ´Ò»´®¶¯Ì¬SQLÓï¾ä,ÓÃPREPARE·ÖÎö¸ÃÓï¾ä,²¢Òª¶¨ÒåÒ»¸öCURSOR½øÐÐȡֵ Èç:ÈçÒª²éѯµÄÊý¾Ý°´Ò»Äê12Ô·ŵ½12ÕűíÖС£±íÃûΪuser_fee_1mon, user_fee_2mon,....¿É²ÉÓö¯Ì¬SQL3À´½øÐвéѯ strcpy(c_sql,"select c_user_id,c_user_name,to_char(t_date,"yyyy/mm/dd hh:mi:ss"),n_fee
"); strcat(c_sql,"from USER_FEE_"); strcat(c_sql,ac_mon); strcat(c_sql,"
where c_user_id = :v1");
EXEC SQL PREPARE s FROM :c_sql;
EXEC SQL DECLARE cur_user_fee CURSOR FOR s;
EXEC SQL OPEN cur_user_fee USING :ac_user_id;
while(1) {
EXEC SQL FETCH cur_user_fee into :c_user_id,:c_user_name,:c_date,:n_fee);
if (sqlca.sqlcode < 0) { /*FETCH CURSORʧ°Ü*/ printf("fetch cursor cur_user_fee fail,sqlcode=%ld,sqlserr=%s",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc); } if( sqlca.sqlcode == SQLNOTFOUND) { break; } } EXEC SQL CLOSE cur_user_fee;
(4)¶¯Ì¬SQL4:Òª´¦ÀíµÄ×ֶμ°ÊäÈëµÄËÞÖ÷±äÁ¿ÊýÄ¿ºÍÖ÷±äÁ¿µÄÀàÐÍÊÂÏÈÊDz»ÖªµÀµÄ,È磺 INSERT INTO EMP () VALUES () ÊÇ×ÔӵĶ¯Ì¬SQL,ºÜÉÙÓÃ,Ôڴ˲»×ö½éÉÜ¡£
11¡¢SQLCA£ºSQLÊÇORACLEµÄÒ»¸ö½á¹¹Ì壬ËüµÄÓòÓÃÓÚ×î½üµÄÒ»ÌõSQLÓï¾äÖ´ÐкóµÄһЩÐÅÏ¢£¬Èç´íÎóºÅ£¬´íÎóÃèÊö£¬¾¯¸æ£¬×´Ì¬µÈ¡£³£ÓÃµÄ Óò½éÉÜÈçÏÂ: SQLCA.sqlcode:´íÎóºÅ,=0ÕýÈ·,=1403ûȡµ½Êý¾Ý SQLCA.sqlserrm.sqlerrmc:´íÎóÃèÊö SQLCA.sqlerrd[3]:×î½üµÄÒ»ÌõSQLÓï¾äËù´¦ÀíµÄÐÐÊý,Èç¹û¸ÃÓï¾ä´¦Àíʧ°Ü,ÔòËüµÄÖµÊDz»¶¨µÄ,Èç¹û´íÎóÔÚÒ»¸öCURSOR²Ù×÷Öз¢Éú,Ôò ËüµÄÖµÖ¸Òѳɹ¦´¦ÀíµÄÐÐÊý.ÔÚDELETE,UPDATEÖÐ,Ëü²»°üº¬ÒòÍâ¼üÔ¼Êø¶øÉ¾³ý,¸üеÄÄÇЩÐÐ, DELETE FROM EMP WHERE DEPT="SALE"; ÔÚ±íEMPÖÐɾ³ý20ÐÐ,µ«Èç¹û±íEMPÓë±íADDRESSÓÐÍâ¼üÔ¼Êø,µ¼Ö±íADDRESSÒ²±»É¾³ý20ÐÐ,ÔòSQLCA.sqlerrd[3]=20,¶ø²»ÊÇ40¡£
SELECT ENAME £¬ JOB£¬ SAL FROM EMP WHERE DEPTNO=£ºDEPTNO£» µ±¸³¸øÒ»¸öÓë²éѯÏà¹ØÁªµÄÓαêCURSORÖ®ºó£¬ µ±SELECT²éѯEMPʱ¿É´ÓÊý¾Ý¿âÖзµ»Ø¶àÐУ¬ÕâЩÐоÍÊÇCURSORµÄÒ»¸ö»î¶¯ÇøÓò¡£ ×¢Ò⣺ 1£© ¶¨ÒåÓÎ±ê±ØÐëÔÚ¶ÔÓαê²Ù×÷֮ǰÍê³É£» 2£© PRO*C²»ÄÜÒýÓÃûÓж¨ÒåµÄÓαꣻ 3£© Óα궨Òåºó£¬Æä×÷Ó÷¶Î§ÊÇÕû¸ö³ÌÐò¡£ËùÒÔ¶ÔÒ»¸ö³ÌÐòÀ´½²£¬ ͬʱ¶¨ÒåÁ½¸öÏàͬµÄÓαêÊÇ´íÎóµÄ¡£ B. ´ò¿ªÓÎ±ê ´ò¿ªÓαêµÄOPENÓï¾äÖ÷ÒªÓÃÀ´ÊäÈëÖ÷±äÁ¿µÄÄÚÈÝ£¬ÕâЩÖ÷ÒªÊÇWHEREÖÐʹÓõÄÖ÷±äÁ¿¡£´ò¿ªÓαêµÄÓï¾äÊÇ£ºEXEC SQL OPEN ¡´ÓαêÃû¡µ µ±´ò¿ªÓαêºó£¬¿ÉÒÔ´ÓÏà¹ØµÄ²éѯÖÐÈ¡³ö¶àÓÚÒ»ÐеĽá¹û¡£ËùÓÐÂú×ã²éѯ±ê×¼µÄÐÐ×é³ÉÒ»¼¯ºÏ£¬½Ð×ö"Óαê»î¶¯¼¯"¡£Í¨¹ýÈ¡²Ù×÷£¬»î¶¯¼¯ÖеÄÿһÐлòÿһ×éÊÇÒ»¸öÒ»¸ö·µ»ØµÄ£¬²éѯÍê³Éºó£¬ Óαê¾Í¿É¹Ø±ÕÁË¡£ÈçͼËùʾ£º ¶¨ÒåÓα꣺DECLARE
¿ªÊ¼²éѯ£ºSELECT ´ò¿ªÓα꣺OPEN
´Ó»î¶¯¼¯È¡Êý¾Ý£ºFETCH
²éѯÍê³É
¹Ø±ÕÓα꣺CLOSE
×¢Ò⣺1£©Óα괦Óڻ¼¯µÄµÚÒ»ÐÐÇ°Ãæ£» 2£©Èô¸Ä±äÁËÊäÈëÖ÷±äÁ¿¾Í±ØÐëÖØÐ´ò¿ªÓαꡣ
C. È¡Êý¾Ý ´Ó»î¶¯¼¯ÖÐÈ¡³öÒ»ÐлòÒ»×é°Ñ½á¹ûË͵½Êä³öÖ÷±äÁ¿ÖеĹý³Ì½ÐÈ¡Êý¾Ý¡£Êä³öÖ÷±äÁ¿µÄ¶¨ÒåÔÚÈ¡Êý¾ÝÓï¾äÖС£È¡Êý¾ÝµÄÓï¾äÈçÏ£º EXEC SQL FETCH¡´ÓαêÃû¡µINTO£ºÖ÷±äÁ¿1£¬Ö÷±äÁ¿2£¬¡¡ FETCHµÄ¹¤×÷¹ý³ÌÈçͼËùʾ£º
ÈçͼËùʾµÄ²éѯ½á¹ûÖ¸Âú×ã²éѯÌõ¼þµÄ²éѯ½á¹û¡£Ê¹ÓÃFETCHӦעÒâÒÔϼ¸µã£º l ÓÎ±ê±ØÐëÏȶ¨ÒåÔÙ´ò¿ª¡£ l Ö»ÓÐÔÚÓαê´ò¿ªÖ®ºó²ÅÄÜÈ¡Êý¾Ý£¬¼´Ö´ÐÐFETCHÓï¾ä¡£ l FETCHÓï¾äÿִÐÐÒ»´Î£¬´Óµ±Ç°Ðлòµ±Ç°×éÈ¡Êý¾ÝÒ»´Î£¬ÏÂÒ»ÐлòÏÂÒ»×éÏòÉÏÒÆÒ»´Î¡£Óαêÿ´ÎËùÖ¸µÄÐлò×鶼Ϊµ±Ç°Ðлòµ±Ç°×飬¶øFETCHÿ´Î¶¼ÊÇÈ¡ÓαêËùÖ¸¶¨µÄÐлò×éµÄÊý¾Ý¡£ l µ±Óαê»î¶¯¼¯¿ÕÖ®ºó£¬ORCLE·µ»ØÒ»¸öSQLCA¡£SQLCA£¨=1403£©¡£ l ÈôÏ£Íû´ËÓαêÔÙ²Ù×÷£¬ ±ØÐëÏȹرÕÔÙ´ò¿ªËü¡£ l ÔÚC³ÌÐòÖпÉÒÔ¿ª±ÙÒ»¸öÄÚ´æ¿Õ¼ä£¬À´´æ·Å²Ù×÷½á¹û£¬ÕâÑù¾ÍÄÜÀûÓÿª±ÙµÄ¿Õ¼äÀ´Áé»î²Ù×ݲéѯµÄ½á¹û¡£ D£®¹Ø±ÕÓαê È¡Íê»î¶¯¼¯ÖÐËùÓÐÐк󣬱ØÐë¹Ø±ÕÓα꣬ÒÔÊÍ·ÅÓë¸ÃÓαêÓйصÄ×ÊÔ´¡£ ¹Ø±ÕÓαêµÄ¸ñʽΪ£º EXEC SQL CLOSE ÓαêÃû£» ÀýÈ磺 EXEC SQL CLOSE C1£» ORACLE V5.0°æÖ§³ÖSQL¸ñʽ¡°CURRENT OF CURSOR¡±¡£ÕâÌõÓï¾ä½«Ö¸ÏòÒ»¸öÓαêÖÐ×îÐÂÈ¡³öµÄÐУ¬ ÒÔÓÃÓÚÐ޸ĺÍɾ³ý²Ù×÷¡£¸ÃÓï¾ä±ØÐëÓÐÈ¡²Ù×÷Ö®ºóʹÓã¬ËüµÈͬ´æ´¢Ò»¸öROWID£¬²¢Ê¹ÓÃËü¡£
(4)£®¾ÙÀý EXEC SQL DECLARE SALESPEOPLE CURSOR FOR SELECT SSNO£¬ NAME£¬ SALARY FROM EMPLOYEE WHERE DNAME=¡®Sales¡¯£» EXEC SQL OPEN SALESPEOPLE£» EXEC SQL FETCH SALESPEOPLE INTO £ºSS£¬£ºNAME£¬£ºSAL£» EXEC SQL CLOSE SALESPEOPLE£»
£¨5£©SQLǶÌ׵ķ½·¨¼°Ó¦Óà ǶÈëSQLÓë½»»¥Ê½SQLÔÚÐÎʽÉÏÓÐÈçϲî±ð£º 1) ÔÚSQLÓï¾äǰÔö¼Óǰ׺¡°EXEC SQL¡±£¬ ÕâһССµÄ²î±ðÆäÄ¿µÄÊÇÔÚÓÚÔ¤±àÒëʱÈÝÒ×ʶ±ð³öÀ´£¬ ÒÔ±ã°ÑÿһÌõSQL×÷ΪһÌõ¸ß¼¶ÓïÑÔÀ´´¦Àí¡£ 2) ÿһSQLÓï¾ä·ÖΪ˵Ã÷ÐÔÓï¾äºÍ¿ÉÖ´ÐÐÓï¾äÁ½´óÀà¡£¿ÉÖ´ÐÐÓï¾äÓÖ·ÖΪÊý¾Ý¶¨Òå¡¢Êý¾Ý¿ØÖÆ¡¢Êý¾Ý²Ù×Ý¡¢Êý¾Ý¼ìË÷ËÄ´óÀà¡£ ¿ÉÖ´ÐÐÐÔSQLÓï¾äдÔڸ߼¶ÓïÑԵĿÉÖ´Ðд¦£»ËµÃ÷ÐÔSQLÓï¾äдÔڸ߼¶ÓïÑÔµÄ˵Ã÷ÐԵĵط½¡£ ÀýÈ磺ÔÚPRO*C³ÌÐòÖн¨Á¢Ò»¸öÃûΪBOOKµÄ±í½á¹¹£¬¹ý³ÌÈçÏ£º #include¡´stdio.h¡µ EXEC SQL BEGIN DECLARE SECTION£» VARCHAR uid[20]£¬ pwd[20]£» EXEC SQL END DECLARE SECTION£» EXEC SQL INCLUDE SQLCA£» Main£¨£© { /*login database*/ strcpy(uid.arr,¡¯wu¡¯); uid.len=strlen(uid,arr); strcpy(pwd.arr,¡¯wu¡¯); pwd.len=strlen(pwd.arr); EXEC SQL CONNECT:uid IDENTIFEED BY:pwd; EXEC SQL CREATE TABLE book ( acqnum number, copies number , price number); EXEC SQL COMMIT WORK RELEASE; EXIT; PRO*C¿É·Ç³£¼ò±ãÁé»îµØ·ÃÎÊORCLEÊý¾Ý¿âÖеÄÊý¾Ý£¬Í¬Ê±ÓÖ¾ßÓÐCÓïÑÔ¸ßËÙµÄÌØµã£¬Òò¶ø¿ÉÍê³ÉһЩORACLE²úÆ·²»ÄÜÍê³ÉµÄÈÎÎñ£¬ÀýÈçÒÔÏÂÒ»¸ö¹Ì¶¨µÄÌØÊâ¸ñʽÊä³ö½á¹û¡£ SQLǶÌ×Ô´³ÌÐòʾÀý #unclude<stdio.h> typedef char asciz[20]; EXEC SQL BEGIN DECLARE SECTION; EXEC SQL TYPE asciz IS STRING (20) REFERENCE; asciz username; asciz password; asciz emp_name(5); int emp_number(5a); float salary[5]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; Void print_rows(); Void sqlerror(); Main() { int num_ret; strcpy(username,¡±SCOTT¡¯); strcpy(password, ¡°TYGER¡±); EXEC SQL WHENEVER SQLERROR DO sqlerror(); EXEC SQL CONNECT:username IDENTIFIED BY:password; Print (¡°
Connected to ORACLE as user:%s
¡±, username); EXEC SQL DECLARE c1 CURSOR FOR SELECT EMPNO , ENAME , SAL FROM EMP; EXEC SQL OPEN c1; Num_ret = 0; For(;;) { EXEC SQL WHENEVER NOT FOUND DO break; EXEC SQL FETCH c1 INTO : emp_number , :emp_name , :salary; Print_rows (sqlca.sqlerrd[2] num_ret); Num_ret=sqlca.sqlerrd[2]; } if ((sqlca.sqlerrd[2] num_ret)>0); print _rows(sqlca.sqlerrd[2] num_ret); EXEC SQL CLOSE c1; Printf(¡°Have a good day.
¡±); EXEC SQL COMMIT WORK RELEASE; }
void print_rows(n); int n; { int i; printf(¡°
Number Employee Salary
¡±); printf(¡°------------------------------
¡±); for (i=0;i<n; i++ ) printf(¡°% - 9d%- 8s%9.2f
¡±,emp-number[i], emp---name[i],salary[i]; } void sqlerror() { EXEC SQL WHENEVER SQLERROR CONTINUE; Printf(¡°
oracle error detected:
¡±); Printf(¡®
%.70s
¡±, sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; Exit(1); }
(6) ´íÎó¼ì²âºÍ»Ö¸´ ÔÚʹÓÃSQLÓï¾äºÍPRO*C¶ÔÊý¾Ý¿â½øÐвÙ×÷ʱ£¬³£³£ÓÐ×ֶοÕÖµ£¬ÎÞÌõ¼þɾ³ý£¬ÎÞÐзµ»Ø£¬Êý¾ÝÒç³öºÍ½Ø¶ÏµÈÏÖÏó·¢Éú£¬ÕâÖÖÏÖÏó¿ÉÒÔÓÃSQLCAºÍָʾÆ÷±äÁ¿À´¼ì²â¡£
1 SQLCAµÄ½á¹¹ ÔÚPRO*C³ÌÐòÖÐSQLCA½á¹¹ÈçÏ£º STRUCT SQLCA{ Char sqlcaid[8]; Long sqlabc; Long sqlcode; STRUCT{ Unsigned sqlerrm1; Char sqlerrmc[10]; }sqlerrm; Char sqlerrp[8]; Long sqlerrd[6]; Char sqlwarn[8]; Char sqlext[8]; } ÆäÖУº 1£© SQLCA.sqlerrm.sqlerrmc£º´øÓÐSQLCA¡£SQLCODEµÄ´íÎóÕýÎÄ¡£ 2£© SQLCA.sqlerrd:µ±Ç°ORACLEµÄ״̬£¬Ö»ÓÐSQLCA.SQLERRD[2]ÓÐÒâÒ壬±íʾDMLÓï¾ä´¦ÀíµÄÐÐÊý¡£ 3£© SQLCA.sqlwarn:Ìṩ¿ÉÄÜÓöµ½µÄÌõ¼þÐÅÏ¢¡£
ÔÚÿִÐÐÒ»¸öSQLÓï¾äºó£¬ORACLE¾Í°Ñ·µ»Ø½á¹û·ÅÈëSQLCAÖУ¬µ«ËµÃ÷Óï¾ä³ýÍâ¡£ ÓÃSQLCA¿ÉÒԲ鿴SQLÓï¾äµÄÖ´Ðнá¹û¡£ÍùÍùÓÐÈýÖÖ½á¹û£º =0£ºÖ´Ðгɹ¦£» SQLCA.SQLCODE= >0£ºÖ´Ðгɹ¦µÄ״ֵ̬£» <0£ºÊ§°Ü£¬²»ÔÊÐí¼ÌÐøÖ´ÐС£
2 ָʾÆ÷±äÁ¿ ָʾÆ÷±äÁ¿ÓÐʱҲ³ÆÖ¸Ê¾±äÁ¿.ָʾ±äÁ¿ÓëÒ»¸öÖ÷±äÁ¿Ïà¹ØÁª,Ö¸³öÖ÷±äÁ¿µÄ·µ»ØÇé¿ö. =0£º·µ»ØÖµ²»Îª¿Õ, δ±»½Ø¶Ï,Öµ·ÅÔÚÖ÷±äÁ¿ÖÐ; ·µ»ØÖµ= >0£º·µ»ØÖµÎª¿Õ, ºöÂÔÖ÷±äÁ¿µÄÖµ; <0£ºÖ÷±äÁ¿³¤¶È²»¹»¾Í±»½Ø¶Ï¡£ ʹÓÃָʾ±äÁ¿Òª×¢Ò⣺ l ÔÚWHERE×Ó¾äÖв»ÄÜÓÃָʾ±äÁ¿¡£ÓÃNULLÊôÐÔÀ´²âÊÔ¿ÕÖµ¡£ ÀýÈçÏÂÁÐ×Ӿ䣺 SELECT¡ FROM¡ WHERE ENAME IS NULL£» ÊÇÕýÈ·µÄ£¬¶ø WHERE ENAME=£ºPEME£ºPEME1 ÊÇ´íÎóµÄ¡£ l ָʾ±äÁ¿ÔÚ²åÈë¿Õֵ֮ǰΪ1 l ¿ÉÊä³ö¿ÕÖµ¡£
3 WHENEVERÓï¾ä WHENEVERÊÇ˵Ã÷Óï¾ä£¬²»·µ»ØSQLCODE£¬ Ö»ÊǸù¾ÝSQLCAÖеķµ»ØÂëÖ¸¶¨Ïà¹ØµÄ´ëÊ©¡£¸ñʽΪ EXEC SQL WHENEVER [SQLERROR|SQLWARNING|NOTFORUND] [STOP|CONTINUE|GOTO<±êºÅ>]; ÆäÖÐ £¨1£©[STOP|CONTINUE|GOT<±êºÅ>]µÄȱʡֵΪCONTINUE¡£ £¨2£©SQLERROR£ºSQLCA.SQLCODE<0; £¨3£©SQLWARNIGN£ºSQLCA.SQLWARN[0]=¡°W¡±£» £¨4£©NOTFOUND£ºSQLCA.SQLCODE=1403£» ÏÂÃæ¸ø³öÒ»¶Î³ÌÐòÀ´ËµÃ÷WHENEVERµÄÓ÷¨£º EXEC SQL BEGIN DEELARE SECTION£» VARCHAR UID[20]£» VARCHAR PASW[20]£» ¡¡ EXEC SQL END DECLARE SECTION£» EXEC SQL INCLUDE SQLCA£» Main£¨£© { ¡¡ EXEC SQL WHENEVER SQLERROR GOTO ERR£» EXEC SQL CONNECT£ºUID/£ºPWD£» ¡¡ EXEC SQL DECLARE CSOR1 CURSOR FOR SELECT ¡´×ֶΡµ FORM¡´±í¡µ EXEC SQL OPEN CSOR1£» SQL ¡¡ EXEC SQL WHENEVER NOT FOUND GOTO good£» For£¨£»£»£© EXEC SQL FETCH CSOR£¬ INTO¡¡ Good£º ¡¡ printf£¨¡°
²éѯ½áÊø
¡±£©; EXEC SQL CLOSE C1; EXEC SQL WHENEVER SQLERROR CONTINUE. EXEC SQL COMMIT WORK RELEASE: Exit(); Printf(¡°
%70s|n¡±, sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE: Exit(1); }
(7) ¶¯Ì¬¶¨ÒåÓï¾ä SQLÓï¾ä·Ö¶¯Ì¬¶¨ÒåÓï¾äºÍ¾²Ì¬¶¨ÒåÓï¾äÁ½ÖÖ£º £¨1£© ¾²Ì¬¶¨ÒåÓï¾ä£ºSQLÓï¾äÊÂÏȱàÈëPRO*CÖУ¬ÔÚ¾¹ýÔ¤±àÒëÆ÷±àÒëÖ®ºóÐγÉÄ¿±ê³ÌÐò*¡£BOJ£¬È»ºóÖ´ÐÐÄ¿±ê³ÌÐòÔ¤¼´¿É¡£ £¨2£© ¶¯Ì¬¶¨ÒåÓï¾ä£ºÓÐЩÓï¾ä²»ÄÜÊÂÏÈǶÈëµ½PRO*C³ÌÐòÖУ¬Òª¸ù¾Ý³ÌÐòÔËÐÐÇé¿ö£¬Óû§×Ô¼º´ÓÊäÈëÉ豸ÉÏ£¨ÈçÖÕ¶ËÉÏ£©ÊµÊ±ÊäÈë¼´½«Ö´ÐеÄSQLÓï¾ä¡£ ¶¯Ì¬¶¨ÒåÓï¾äÓУº l EXECUTE IMMEDIATE£» l PREPARE ÓëEXECUTE£» l PREPAREÓëFETCH ºÍ OPEN £» l BINDÓëDEFINE DESCRIPTOR¡£
1£® EXECUTE IMMEDIATEÓï¾ä ´ËÓï¾ä±íʾÁ¢¼´Ö´ÐУ¬ ²¢ÇÒÖ»ÏòSQLCA·µ»ØÖ´Ðнá¹û£¬ÎÞÆäËüÐÅÏ¢¡£ÀýÈ磺 EXEC SQL BEGIN DECLARE SECTION£» VARCHAR abcd[89]; VARCHAR deay[20]; EXEC SQL END DECLARE SECTION; /** Êä³ö×Ö·û´®µ½abcd **/ EXEC SQL EXECUTE IMMEDIATE :abcd; ×¢Ò⣺ 1£© EXECUTE IMMEDIATEÖ»ÄÜÔËÐдøÒ»¸ö²ÎÊýµÄ¶¯Ì¬Óï¾ä¡£ÆäÖУ¬abcdÊDzÎÊý£¬²»Êǹؼü×Ö¡£ 2£© EXECUTE IMMEDIATEʹÓõÄÏȾöÌõ¼þÊÇ£ºSQLÓï¾ä²»Äܰüº¬Ö÷±äÁ¿£»SQLÓï¾ä²»ÄÜÊDzéѯÓï¾ä¡£ 3£© ¿ÉÓÃÈκÎÖ÷±äÁ¿×÷ΪEXECUTE IMMEDIATEµÄ²ÎÊý£»Ò²¿ÉÓÃ×Ö·û´®×÷ΪÖ÷±äÁ¿¡£
2£® PREPAREÓëEXECUTEÓï¾ä ´ËÓï¾ä±íʾ¡°Ô¤±àÒë/Ö´ÐС±¡£´ËÓï¾äÄܹ»Ô¤±àÒëÒ»´Î¶øÖ´Ðжà´Î¡£Ó﷨Ϊ£º EXEC SQL PREPARE ¡´Óï¾äÃû¡µFROM£ºÖ÷±äÁ¿£» EXEC SQL EXECUTE¡´Óï¾äÃû¡µ[USING£ºÌæ»»Ö÷±äÁ¿]£» PREPAREÓï¾ä×öÁ½¼þÊ£º £¨1£© Ô¤±àÒëSQLÓï¾ä£» £¨2£© ¸ø³öSQLÓï¾äµÄÓï¾äÃû¡£ ×¢Ò⣺ l SQLÓï¾ä²»ÄÜÊDzéѯÓï¾ä£» l PREPAREºÍEXECUTE¿É°üº¬Ö÷±äÁ¿£» l PREPARE²»Äܶà´ÎÖ´ÐС£ ÀýÈ磺<example.pc> #define USERNAME ¡°SCOTT¡± #define PASSWORD ¡°TIGER¡± #include <stdio.h>
EXEC SQL INCLUDE sqlca; EXEC SQL BEGIN DECLARE SECTION; Char * username=USERNAME; Char * password=PASSWORD; VARCHAR sqlstmt[80]; Int emp_number; VARCHAR emp_name[15]; VARCHAR job[50]; EXEC SQL END DECLARE SECTION; Main() { EXEC SQL WHENEVER SQLERROR GOTO :sqlerror; EXEC SQL CONNECT :username IDENTIFIED BY :password; Sqlstmt.len=sprintf(sqlstmt.arr,¡±INSERT INTO EMP (EMPNO,ENAME,JOB,SAL) VALUES(:V1,:V2,:V3,:V4)¡±); Puts(sqlstmt.arr); EXEC SQL PREPARE S FROM :sqlstmt; For(;;) { printf(¡°
enter employee number:¡±); scanf(¡°%d¡±,&emp_number); if (emp_number==0) break; printf(¡°
enter employee name:¡±); scanf(¡°%s¡±,&emp_name.arr); emp_name.len=strlen(emp_name.arr); printf(¡°
enter employee job:¡±); scanf(¡°%s¡±,job.arr); job.len=strlen(job.arr); printf(¡°
enter employee salary:¡±); scanf(¡°%f¡±,&salary); } EXEC SQL EXECUTE S USING :emp_number,:emp_name,:job,:salary; }
3£® FETCHÓï¾äºÍOPENÓï¾ä FETCHÓï¾äºÍOPENÓï¾äÕâ×鶯̬Óï¾äÊǶÔÓÎ±ê½øÐвÙ×÷µÄ£¬ÆäÖ´Ðйý³ÌÈçÏ£º
PREPARE¡´Óï¾äÃû¡µFROM ¡´Ö÷±äÁ¿×Ö·û´®¡µ£»
DECLARE¡´ÓαêÃû¡µFOR¡´Óï¾äÃû¡µ£»
OPEN ¡´ÓαêÃû¡µ[USING£ºÌæ»»±äÁ¿1[£¬£ºÌæ»»±äÁ¿±ä¡]]
FETCH¡´ÓαêÃû¡µINTO£º Ö÷±äÁ¿1[£¬£ºÖ÷±äÁ¿2¡]
CLOSE¡´ÓαêÃû¡µ
×¢Ò⣺ l SQLÓï¾äÔÊÐíʹÓòéѯÓï¾ä£» l SELECT×Ó¾äÖеÄÁÐÃû²»Äܶ¯Ì¬¸Ä±ä£¬Ö»ÄÜÔ¤Öã» l WHEREºÍORDER BY ×Ó¾ä¿ÉÒÔ¶¯Ì¬¸Ä±äÌõ¼þ¡£
Ò»¡¢ Pro*CµÄ±àÒëºÍÔËÐÐ
1£® ÏÈÓÃORACLEÔ¤±àÒëÆ÷PROC¶ÔPRO*C³ÌÐò½øÐÐÔ¤´¦Àí£¬¸Ã±àÒëÆ÷½«Ô´³ÌÐòÖÐǶÈëµÄSQLÓïÑÔ·Òë³ÉCÓïÑÔ£¬²úÉúÒ»¸öCÓïÑÔ±àÒëÆ÷ÄÜÖ±½Ó±àÒëµÄÎļþ¡£Éú³ÉÎļþµÄÀ©Õ¹ÃûΪ .C 2£® ÓÃCÓïÑÔ±àÒëÆ÷CC ¶ÔÀ©Õ¹ÃûΪ .cµÄÎļþ±àÒë,²úÉúÄ¿±êÂëÎļþ,ÆäÀ©Õ¹ÃûΪ .o 3£® ʹÓÃMAKEÃüÁî,Á¬½ÓÄ¿±êÂëÎļþ,Éú³É¿ÉÔËÐÐÎļþ ÀýÈç: ¶ÔÉÏÃæµÄexample.pc½øÐбàÒëÔËÐÐ PROC iname=example.pc CC example.c MAKE EXE=example OBJS=¡±example.o¡± example
Ô´´úÂëÍø¹©¸å. |