<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    This Is A FineDay

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      93 隨筆 :: 0 文章 :: 69 評論 :: 0 Trackbacks
    http://www.yesky.com/250/1850750_3.shtml
    程序內容

      一般SQL嵌入式程序主要有說明、包含頭文件、子程序聲明、主程序和子程序等部分組成,在主程序中調用有關子程序。必備的子程序通常有連接到數據庫子程序、斷開數據庫子程序、錯誤處理子程序和完成某項具體事務(如查詢、插入、修改、刪除等)的工作子程序。

      2、程序舉例

      下面是一完整的可通過預編譯、編譯鏈接和運行的示例程序。

    /* exam01.pc 開發Oracle接口程序舉例 */
    /* 說明:本程序介紹用PROC開發Oracle庫接口的編程特點。通過向AUTHS
    * 表輸入作家代碼,查詢作家姓名及工資。運行前應建表、插入數據并提交。*/
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    /* 包含SQL通訊區,它用于處理錯誤。*/
    #include <sqlca.h>
    void connect(); /* 連接到Oracle Server */
    void disconnect(); /* 斷開到Oracle Server的連接 */
    void sql_error(char *); /* 處理錯誤句柄 */
    void select(); /* 查詢子程序 */
    extern sqlglm(char *,int *,int *);
    /* 主程序 */
    void main()
    {
     /* 安裝錯誤處理句柄 */
     EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle錯誤--\n");
     /* 連接到數據庫 */
     connect();
     /* 執行查詢 */
     select();
     /* 斷開數據庫連接 */
     disconnect();
    }
    /* 子程序 */
    /* 連接子程序 connect() */
    void connect()
    {
     EXEC SQL BEGIN DECLARE SECTION;
     VARCHAR username[10], password[10], server[10];
     EXEC SQL END DECLARE SECTION;
     /* 輸入用戶名、口令以及服務器名 */
     printf("\n輸入用戶名:");
     gets(username.arr);
     username.len=(unsigned short)strlen((char *)username.arr);
     printf("\n輸入口令:");
     gets(password.arr);
     password.len=(unsigned short)strlen((char *)password.arr);
     printf("\n輸入服務器名:");
     gets(server.arr);
     server.len=(unsigned short)strlen((char *)server.arr);
     /* 連接到Oracle服務器上 */
     EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
     printf("\n以用戶%s成功地連接到了服務器%s上!\n", username.arr, server.arr);
    }
    /* 斷開連接子程序 disconnect() */
    void disconnect()
    {
     char temp;
     printf("\n是否在斷開連接前提交所有事務? (Y/N)");
     scanf("%c", &temp);
     fflush(stdin);
     if(temp !='Y' && temp != 'y')
     {
      /* 回退事務,斷開連接。 */
      EXEC SQL ROLLBACK WORK RELEASE;
      printf("\n回退事務,斷開連接,退出程序!\n\n");
     }
     else
     {
      /* 提交事務,斷開連接。 */
      EXEC SQL COMMIT WORK RELEASE;
      printf("\n提交事務,斷開連接,退出程序!\n\n");
      exit(1);
     }
    }
    /* 查詢子程序 select()
    * 首先輸入作家代碼,然后查詢作家姓名和工資。*/
    void select()
    {
     EXEC SQL BEGIN DECLARE SECTION;
     char author_code[8], name[10];
     float salary;
     short salary_ind;
     EXEC SQL END DECLARE SECTION;
     printf("\n輸入作家代碼: ");
     gets(author_code);
     /* 查詢作家姓名和工資 */
     EXEC SQL SELECT name, salary INTO :name, :salary:salary_ind
     FROM auths
     WHERE author_code = :author_code;
     /* 根據指示變量的值來確定該作家的工資是否為空。*/
     if (salary_ind ==0)
     {
      printf("\n作家代碼\t作家姓名\t作家工資\n");
      printf("--------\t--------\t--------\n");
      printf("%8s\t%8s\t%8.2f\n", author_code, name, salary);
     }
     else
     {
      printf("作家%s的工資未錄入,為空值!\n", name);
     }
    }
    /* 錯誤處理子程序 sql_error() */
    void sql_error(char *msg)
    {
     char err_msg[128];
     size_t buf_len, msg_len;
     /* 出現SQL錯誤,繼續往下執行。 */
     EXEC SQL WHENEVER SQLERROR CONTINUE;
     printf("\n%s\n", msg);
     buf_len=sizeof(err_msg);
     /* 調用函數sqlglm()獲得錯誤消息。 */
     sqlglm(err_msg, &buf_len, &msg_len);
     printf("%.*s\n", msg_len, err_msg);
     /* 回退事務,斷開連接,退出程序。 */
     EXEC SQL ROLLBACK RELEASE;
     exit(EXIT_FAILURE);
    }

      3、建表和插入數據記錄

      上述示例程序如要正確運行,還需以Oracle庫的合法用戶登錄,并創建AUTHS表和插入一些數據記錄。建表文件、建表命令和插入數據記錄的示例命令如下所述。這里敘述的工作完成后,上節生成的可執行文件才能正確運行。

      REM 以下為建表文件auths.SQL

    DROP TABLE auths CASCADE CONSTRAINTS
    /
    CREATE TABLE auths(
    AUTHOR_CODE VARCHAR2(8) NOT NULL,
    NAME VARCHAR2(10),
    BIRTHDATE DATE,
    ENTRY_DATE_TIME DATE,
    SALARY NUMBER(7,2),
    remark VARCHAR2(255))
    /
    REM 下一行為在PL/SQL環境中運行建表文件的命令
    REM @ E: \ PROCW \ Exam01 \ auths.sql
    REM 下一行為在PL/SQL環境中向auths表插入數據的命令,插入后應提交(COMMIT)!
    REM INSERT INTO auths(author_code,name,salary) VALUES('A00001','王達琳',1200);
    posted on 2008-07-02 22:44 Peter Pan 閱讀(188) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 67194国产精品免费观看| 美女在线视频观看影院免费天天看| 最近2022中文字幕免费视频| 中文免费观看视频网站| 精品国产免费观看| 免费观看国产精品| 老司机午夜性生免费福利| 免费一级毛片在线播放| 思思久久99热免费精品6| 免费jjzz在在线播放国产| 亚洲国产成人AV网站| 亚洲人午夜射精精品日韩| 亚洲免费日韩无码系列| 亚洲欭美日韩颜射在线二| 久久青草精品38国产免费| 久久国产亚洲高清观看| 毛片免费视频播放| 亚洲欧洲国产综合AV无码久久| 免费国产怡红院在线观看| 精品无码一级毛片免费视频观看 | 国产亚洲精品拍拍拍拍拍| 免费毛片在线看不用播放器| 亚洲天天在线日亚洲洲精| 国产成人综合亚洲| 伊人久久亚洲综合| 亚洲一区免费在线观看| 亚洲精品美女久久7777777 | 国产乱人免费视频| 99在线热播精品免费99热| 又粗又硬又大又爽免费视频播放| 一区二区三区免费高清视频| 亚洲a在线视频视频| 在线播放高清国语自产拍免费 | 亚洲男人在线无码视频| 一级毛片在线免费观看| 中文字幕乱码亚洲无线三区| 国产精品免费看久久久| 亚洲一区二区无码偷拍| 久久激情亚洲精品无码?V| 在线视频免费观看爽爽爽| 国产精品亚洲专区一区|