EXEC SQL DELETE FROM closeoutsale
WHERE temp_price = :saleprice :saleprice_null; Äã¿ÉÒÔʹÓÃÏÂÃæÓï¾äÀ´Íê³ÉÉÏÊö¹¦ÄÜ£º if (saleprice_null == -1) {
EXEC SQL DELETE FROM closeoutsale WHERE temp_price IS null; } else {
EXEC SQL DELETE FROM closeoutsale WHERE temp_price = :saleprice;
}
ΪÁ˱ãÓÚʶ±ðÖ÷±äÁ¿£¬µ±Ç¶ÈëʽSQLÓï¾äÖгöÏÖÖ÷±äÁ¿Ê±£¬±ØÐëÔÚ±äÁ¿Ãû³ÆÇ°±êÉÏðºÅ£¨£º£©¡£Ã°ºÅµÄ×÷ÓÃÊÇ£¬¸æËßÔ¤±àÒëÆ÷£¬ÕâÊǸöÖ÷±äÁ¿¶ø²»ÊDZíÃû»òÁÐÃû¡£
2 Êý¾ÝµÄ²éѯºÍÐÞ¸Ä
¿ÉÒÔʹÓÃSELECT INTOÓï¾ä²éѯÊý¾Ý£¬²¢½«Êý¾Ý´æ·ÅÔÚÖ÷±äÁ¿ÖС£ÈçÉÏÀýÖеģº
EXEC SQL SELECT au_fname INTO :first_name
from authors where au_lname = :last_name;
ʹÓÃDELETEÓï¾äɾ³ýÊý¾Ý¡£ÆäÓï·¨ÀàËÆÓÚTransact-SQLÖеÄDELETEÓï·¨¡£È磺 EXEC SQL DELETE FROM authors WHERE au_lname = 'White'
ʹÓÃUPDATEÓï¾ä¿ÉÒÔ¸üÐÂÊý¾Ý¡£ÆäÓï·¨¾ÍÊÇTransact-SQLÖеÄUPDATEÓï·¨¡£È磺 ` EXEC SQL UPDATE authors SET au_fname = 'Fred' WHERE au_lname = 'White' ʹÓÃINSERTÓï¾ä¿ÉÒÔ²åÈëÐÂÊý¾Ý¡£ÆäÓï·¨¾ÍÊÇTransact-SQLÖеÄINSERTÓï·¨¡£È磺
EXEC SQL INSERT INTO homesales (seller_name, sale_price) real_estate('Jane Doe', 180000.00); ¶àÐÐÊý¾ÝµÄ²éѯºÍÐÞ¸ÄÇë²Î¼ûÏÂÒ»½Ú¡ª¡ªÓαꡣ
3 ÓαêµÄʹÓÃ
ÓÃǶÈëʽSQLÓï¾ä²éѯÊý¾Ý·Ö³ÉÁ½ÀàÇé¿ö¡£Ò»ÀàÊǵ¥Ðнá¹û£¬Ò»ÀàÊǶàÐнá¹û¡£¶ÔÓÚµ¥Ðнá¹û£¬¿ÉÒÔʹÓÃSELECT INTOÓï¾ä£»¶ÔÓÚ¶àÐнá¹û£¬Äã±ØÐëʹÓÃcursor£¨Óα꣩À´Íê³É¡£Óαê(Cursor)ÊÇÒ»¸öÓëSELECTÓï¾äÏà¹ØÁªµÄ·ûºÅÃû£¬ËüʹÓû§¿ÉÖðÐзÃÎÊÓÉSQL Server·µ»ØµÄ½á¹û¼¯¡£ÏÈÇë¿´ÏÂÃæÕâ¸öÀý×Ó£¬Õâ¸öÀý×ÓµÄ×÷ÓÃÊÇÖðÐдòÓ¡staff±íµÄid¡¢name¡¢dept¡¢ job¡¢years¡¢salaryºÍcommµÄÖµ¡£
EXEC SQL DECLARE C1 CURSOR FOR
SELECT id, name, dept, job, years, salary, comm FROM staff;
EXEC SQL OPEN c1;
while (SQLCODE == 0) {
/* SQLCODE will be zero if data is successfully fetched */
EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm; if (SQLCODE == 0)
printf(\ id, name, dept, job, years, salary, comm); }
EXEC SQL CLOSE c1;
´ÓÉÏÀý¿´³ö£¬ÄãÊ×ÏÈÓ¦¸Ã¶¨ÒåÓαê½á¹û¼¯£¬¼´¶¨Òå¸ÃÓαêµÄSELECTÓï¾ä·µ»ØµÄÐеļ¯ºÏ¡£È»ºó£¬Ê¹ÓÃFETCHÓï¾äÖðÐд¦Àí¡£
ÖµµÃ×¢ÒâµÄÊÇ£¬Ç¶ÈëSQLÓï¾äÖеÄÓα궨ÒåÑ¡ÏîͬTransact-SQL ÖеÄÓα궨ÒåÑ¡ÏîÓÐЩ²»Í¬¡£±ØÐë×ñÑǶÈëSQLÓï¾äÖеÄÓα궨ÒåÑ¡Ïî¡£ 1£©¡¢ÉùÃ÷Óα꣺
È磺EXEC SQL DECLARE C1 CURSOR FOR
SELECT id, name, dept, job, years, salary, comm FROM staff; 2£©¡¢´ò¿ªÓαê
È磺EXEC SQL OPEN c1;
ÍêÕûÓ﷨Ϊ£ºOPEN ÓαêÃû [USING Ö÷±äÁ¿Ãû | DESCRIPTOR ÃèÊöÃû]¡£¹ØÓÚ¶¯Ì¬OPENÓαêµÄÃèÊö¼ûµÚËĽڡ£ 3£©¡¢È¡Ò»ÐÐÖµ
È磺EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm; ¹ØÓÚ¶¯Ì¬FETCHÓï¾ä¼ûµÚËĽڡ£ 4£©¡¢¹Ø±ÕÓαê
È磺EXEC SQL CLOSE c1;
¹Ø±ÕÓαêµÄͬʱ£¬»áÊÍ·ÅÓÉÓαêÌí¼ÓµÄËøºÍ·ÅÆúδ´¦ÀíµÄÊý¾Ý¡£ÔڹرÕÓαêǰ£¬¸ÃÓÎ±ê±ØÐëÒѾÉùÃ÷ºÍ´ò¿ª¡£ÁíÍ⣬³ÌÐòÖÕֹʱ£¬ÏµÍ³»á×Ô¶¯¹Ø±ÕËùÓдò¿ªµÄÓαꡣ
Ò²¿ÉÒÔʹÓÃUPDATEÓï¾äºÍDELETEÓï¾äÀ´¸üлòɾ³ýÓÉÓαêÑ¡ÔñµÄµ±Ç°ÐС£Ê¹ÓÃDELETEÓï¾äɾ³ýµ±Ç°ÓαêËùÔÚµÄÐÐÊý¾ÝµÄ¾ßÌåÓï·¨ÈçÏ£º
DELETE [FROM] {table_name | view_name} WHERE CURRENT OF cursor_name ÆäÖУ¬ ? ? ?
table_nameÊDZíÃû£¬¸Ã±í±ØÐëÊÇDECLARE CURSORÖÐSELECTÓï¾äÖÐµÄ±í¡£
view_nameÊÇÊÓͼÃû£¬¸ÃÊÓͼ±ØÐëÊÇDECLARE CURSORÖÐSELECTÓï¾äÖеÄÊÓͼ¡£ cursor_nameÊÇÓαêÃû¡£
Çë¿´ÏÂÃæÕâ¸öÀý×Ó£¬ÖðÐÐÏÔʾfirstnameºÍlastname£¬Ñ¯ÎÊÓû§ÊÇ·ñɾ³ý¸ÃÐÅÏ¢£¬Èç¹û»Ø´ð¡°ÊÇ¡±£¬ÄÇôɾ³ýµ±Ç°ÐеÄÊý¾Ý¡£ EXEC SQL DECLARE c1 CURSOR FOR
SELECT au_fname, au_lname FROM authors FOR BROWSE;
EXEC SQL OPEN c1;
while (SQLCODE == 0)
{
EXEC SQL FETCH c1 INTO :fname, :lname; if (SQLCODE == 0) {
printf(\ printf(\ scanf(\ if (reply == 'y') {
EXEC SQL DELETE FROM authors WHERE CURRENT OF c1; printf(\ } } }
4 SQLCA
DBMSÊÇͨ¹ýSQLCA£¨SQLͨÐÅÇø£©ÏòÓ¦ÓóÌÐò±¨¸æÔËÐдíÎóÐÅÏ¢£¨¼û3.4ÖеÄÀý×Ó£©¡£SQLCAÊÇÒ»¸öº¬ÓдíÎó±äÁ¿ºÍ״ָ̬ʾ·ûµÄÊý¾Ý½á¹¹¡£Í¨¹ý¼ì²éSQLCA£¬Ó¦ÓóÌÐòÄܹ»¼ì²é³öǶÈëʽSQLÓï¾äÊÇ·ñ³É¹¦£¬²¢¸ù¾Ý³É¹¦Óë·ñ¾ö¶¨ÊÇ·ñ¼ÌÐøÍùÏÂÖ´ÐС£Ô¤±àÒëÆ÷×Ô¶¯ÔÚǶÈëSQLÓï¾äÖаüº¬SQLCAÊý¾Ý½á¹¹£¨¼ûµÚ¶þ½ÚµÄÀý×Ódemo.c£©¡£ÔÚ³ÌÐòÖпÉÒÔʹÓÃEXEC SQL INCLUDE SQLCA£¬Ä¿µÄÊǸæËßSQLÔ¤±àÒë³ÌÐòÔڸóÌÐòÖаüº¬Ò»¸öSQLͨÐÅÇø¡£Ò²¿ÉÒÔ²»Ð´£¬ÏµÍ³»á×Ô¶¯¼ÓÉÏSQLCA½á¹¹¡£
1£©¡¢SQLCODE
SQLCA½á¹¹ÖÐ×îÖØÒªµÄ²¿·ÖÊÇSQLCODE±äÁ¿¡£ÔÚÖ´ÐÐÿÌõǶÈëʽSQLÓï¾äʱ£¬DBMSÔÚSQLCAÖÐÉèÖñäÁ¿SQLCODEÖµ£¬ÒÔÖ¸Ã÷Óï¾äµÄÍê³É״̬£º 1¡¢0 ¸ÃÓï¾ä³É¹¦Ö´ÐУ¬ÎÞÈκδíÎó»ò±¨¾¯¡£ 2¡¢<0 ³öÏÖÁËÑÏÖØ´íÎó¡£ 3¡¢>0 ³öÏÖÁ˱¨¾¯ÐÅÏ¢¡£
2£©¡¢SQLSTATE
SQLSTATE±äÁ¿Ò²ÊÇSQLCA½á¹¹ÖеijÉÔ±¡£ËüͬSQLCODEÒ»Ñù£¬¶¼ÊÇ·µ»Ø´íÎóÐÅÏ¢¡£SQLSTATEÊÇÔÚSQLCODEÖ®ºó²úÉúµÄ¡£ÕâÊÇÒòΪ£¬ÔÚÖÆ¶¨SQL2±ê׼֮ǰ£¬¸÷¸öÊý¾Ý¿â³§É̶¼²ÉÓÃSQLCODE±äÁ¿À´±¨¸æÇ¶ÈëʽSQLÓï¾äÖеĴíÎó״̬¡£µ«ÊÇ£¬¸÷¸ö³§ÉÌûÓвÉÓñê×¼µÄ´íÎóÃèÊöÐÅÏ¢ºÍ´íÎóÖµÀ´±¨¸æÏàͬµÄ´íÎó״̬¡£ËùÒÔ£¬±ê×¼»¯×éÖ¯Ôö¼ÓÁËSQLSTATE±äÁ¿£¬¹æ¶¨ÁËͨ¹ýSQLSTATE±äÁ¿±¨¸æ´íÎó״̬ºÍ¸÷¸ö´íÎó´úÂë¡£Òò´Ë£¬Ä¿Ç°Ê¹ÓÃSQLCODEµÄ³ÌÐòÈÔÈ»ÓÐЧ£¬µ«Ò²¿ÉÓñê×¼µÄSQLSTATE´íÎó´úÂë±àдгÌÐò¡£
5 DB2µÄǶÈëSQL³ÌÐò´¦Àí¹ý³Ì
ǶÈëSQL³ÌÐò´¦Àí£¬ÓÉÒ»¸öÔ´³ÌÐò´´½¨ÎªÒ»¸ö¿ÉÖ´ÐÐÎļþµÄ¹ý³Ì¡£ Ê×ÏȶÔÔ´Îļþ×öÔ¤±àÒ루precompiler£©£¬Éú³ÉÁ½¸ö²¿·ÖÎļþ£ºÒ»²¿·ÖÊÇ´¿µÄC³ÌÐòÔ´ÎÄ
¼þ£¬ËüÃÇºÍÆäËûµÄC³ÌÐòÔ´ÎļþÒ»Æð£¬¾¹ý±àÒëºÍÁ¬½ÓÉú³É¿ÉÖ´ÐеijÌÐò£¨executable program£©£¬¶øÁíÒ»²¿·ÖÊÇbindÎļþ»òpackageÎļþ¡£BindÎļþ¾¹ýbinder²Ù×÷ÒÔºó£¬Ò²Éú³ÉΪpackageÎļþ¡£Ëùνpackage£¬Êµ¼ÊÉÏÊÇSQLÓï¾äµÄ·ÃÎʼƻ®¡£ËùÒÔ£¬Ô¤±àÒëÆ÷½«Ô´³ÌÐòÖеÄSQLÓï¾äÌá³öÀ´£¬Éú³ÉËûÃǵķÃÎʼƻ®£¬²¢½«·ÃÎʼƻ®´æ·ÅÔÚÊý¾Ý¿â¹ÜÀíÆ÷ÖС£µ±Ö´ÐгÌÐò²¢Óöµ½·ÃÎÊÊý¾Ý¿âµÄÃüÁîʱ£¬Ëü½«µ½Êý¾Ý¿â¹ÜÀíÆ÷ÖÐѰÕÒÊôÓÚËüµÄ·ÃÎʼƻ®£¬È»ºó°´ÕÕ·ÃÎʼƻ®ÖÐËùÉè¼ÆµÄ·½·¨¶ÔÊý¾Ý¿â½øÐзÃÎÊ¡£ µÚÒ»²½¡¢Ô¤±àÒë
Ô´³ÌÐòÉú³ÉÒÔºó£¬ÔÚÔ´³ÌÐòÖÐǶÈëÁËÐí¶àSQLÓï¾ä£¬¶øSQLÓï¾äÊÇËÞÖ÷ÓïÑÔ±àÒëÆ÷Ëù²»ÈÏʶµÄ£¬ËùÒÔÔÚÓÃËÞÖ÷ÓïÑÔ±àÒëÆ÷½øÐбàÒë¡¢Á¬½Ó֮ǰ±ØÐ뽫SQLÓï¾ä·ÖÀë³öÀ´£¬Õâ¾ÍÊÇÔ¤±àÒëËù×öµÄ¹¤×÷¡£DB2ÖÐÔ¤±àÒë²Ù×÷ÊÇͨ¹ýPREPÃüÁîÖ´Ðеģ¬PREPÃüÁîÊ×ÏȽ«Ô´³ÌÐòÖеÄËùÓÐÓйØSQLÓï¾äÈ«²¿×¢ÊÍÆðÀ´£¬¶ÔËü½øÐзÖÎöºÍÓï·¨¼ì²é¡£Èç¹ûÔ´³ÌÐòÖеÄSQLÓï¾äÈ«²¿ÊéдÕýÈ·£¬Ôò½«ÕâЩSQLÓï¾äת»»³ÉCÓïÑÔ¿ÉÒÔʶ±ðµÄһϵÁеÄAPIº¯Êý¡£ÕâЩº¯Êý¿ÉÒÔÔÚº¯ÊýÖ´ÐÐʱ·ÃÎÊÊý¾Ý¿â£¬È»ºó½«Ô´ÎļþÖÐËùÓÐÓÃÓÚÉú³ÉÊý¾Ý¿â¹ÜÀíÆ÷µÄPACKAGEµÄÊý¾ÝÌá³ö×éºÏ³ÉÒ»¸öBINDÎļþ¡£Ò²¿ÉÒÔÖ±½ÓÉú³ÉÒ»¸öPACKAGE£¬µ«ÕâÏ൱ÓÚÔÚÔ¤±àÒëºóÓÖÖ´ÐÐÁËÒ»´ÎBIND²Ù×÷¡£ÔÚÔ¤±àÒëʱ£¬¶ÔÕû¸öÔ´³ÌÐòÎļþÖеÄËùÓбäÁ¿×öͳһ´¦Àí¶ø²»¸ù¾Ý±äÁ¿µÄÉúÃüÆÚÀ´´¦Àí£¬ËùÒÔËÞÖ÷±äÁ¿ÔÚÕû¸ö³ÌÐòÖÐÊÇΨһµÄ¡£ÏÂÃæ½²½âÔ¤±àÒëµÄ²½Ö裺 1£©¡¢Á¬½Óµ½Ò»¸öÊý¾Ý¿â£¬¸Ã²Ù×÷ÊÇΪBIND×ö×¼±¸¡£²Ù×÷ÈçÏ£º db2 connect to cicstest 2£©¡¢Ö´ÐÐÔ¤±àÒëÃüÁ¼ÙÉèÔ´ÎļþΪadhoc.sqc£¬Ôò£º
db2 prep adhoc.sqc bindfile
ÏÂÃæÎÒÃǶÔÔ¤±àÒëµÄ¼¸ÖÖÊä³öÎļþ½øÐÐÌÖÂÛ¡£
Ô¤±àÒëºóÉú³ÉµÄCÓïÑÔÔ´Îļþ£º¸ÃÎļþÖÐÔÓеÄSQLÓï¾ä£¬ÒѾȫ²¿¼ÓÉÏ×¢ÊͲ¢×ª»»³ÉÁËCÓïÑÔ¿ÉÒÔʶ±ðµÄAPIµ÷Óá£
BINDÎļþ£ºÈç¹ûÔÚÔ¤±àÒëʱʹÓÃBINDFILEÑ¡ÏÔòÉú³ÉBINDÎļþ£¬BINDÎļþµÄºó׺Ϊ.bnd£¬BINDÎļþ¿ÉÒÔÔÚ½«À´Ê¹ÓÃBINDÃüÁîÀ´Éú³ÉPACKAGE¡£
db2 bind adhoc.bnd
Èç¹ûÔÚÔ¤±àÒëʱ£¬Ö»Éú³ÉBINDÎļþ£¬ÄÇô¼´Ê¹ÔÚÔ¤±àÒëʱ£¬²»ÄÜ·ÃÎÊijЩÊý¾Ý¿â¶ÔÏó£¬ÏµÍ³Ò²Ö»ÊDZ¨¾¯£¬¶ø²»»á±¨´í¡£Èç¹ûʹÓÃPACKAGEÑ¡ÏÔòÉú³ÉPACKAGE¡£Èç¹ûÓÐMESSAGEÑ¡ÏÔòÉú³ÉÐÅÏ¢Îļþ£¬Ëü°üº¬ÁËËùÓеķµ»ØÐÅÏ¢£¬È磺¾¯±¨¡¢´íÎóµÈ¡£Ëü±ãÓÚ³ÌÐòÔ±¶ÔÔ´³ÌÐò×ö½øÒ»²½µÄÐ޸ġ£ µÚ¶þ²½¡¢±àÒëºÍÁ¬½Ó
ÔÚÔ¤±àÒëºó£¬³ÌÐòÖÐÖ»ÓÐCÓïÑÔÓï¾ä£¬ËüÃǶ¼¿ÉÒÔΪCÓïÑԵıàÒëÆ÷Ëùʶ±ð¡£ËùÒÔ£¬¿ÉÒÔ°´ÕÕÒ»°ãµÄ·½·¨½øÐбàÒëºÍÁ¬½Ó£¬µ«ÔÚ½«SQLÓï¾äת»»ÒÔºó£¬ÔÚCÓïÑÔ³ÌÐòÖУ¬ÓÖÒýÈëÁËÐí¶àÒ»°ãµÄCÓïÑÔϵͳËùûÓеÄINCLUDEÎļþºÍº¯Êý¿â£¬ÕâЩ¾ùÔÚDB2µÄSDKÖС£ËùÒÔ£¬ÒªÉú³É¿ÉÖ´ÐеijÌÐò£¬¾Í±ØÐë°²×°DB2µÄSDK£¬²¢ÇÒ×öÒÔÏÂÉèÖãº
set INCLUDE=$(DB2PATH)\\include;%include% set LIB=$(DB2PATH)\\lib;%LIB% ÏÂÃæÊDZàÒëºÍÁ¬½Ó£º
cl -o adhoc.exe adhoc.c
Éú³ÉµÄ¿ÉÖ´ÐÐÎļþ±ØÐëÓëÊý¾Ý¿â¹ÜÀíÆ÷ÖеÄPACKAGEÏà½áºÏ£¬²ÅÄÜÖ´ÐС£
BIND
PACKAGEÊÇDB2ΪSQLÓï¾äÖÆ¶¨µÄ·ÃÎʼƻ®¡£Í¨¹ýprecompileÖ®ºó£¬Ô´³ÌÐòÖеÄSQLÓï¾ä²¿·Ö¾Í±»·ÖÀë³öÀ´¡£PACKAGE¾ÍÊǸù¾Ý¾ßÌåµÄSQLÓï¾äºÍÊý¾Ý¿âÖеÄÐÅÏ¢Éú³ÉµÄÕë