/* Exam01。用PC開發Oracle接口程序實例*/
/*說明:本程序介紹了用PROC開發Oracle庫接口的編程特點。通過向AUTHS報告
*輸入寫手代碼,查詢寫手姓名和工資表。在運行之前,應該建立表,應該插入和提交數據。*/
# include & ltstdio.h & gt
# include & ltstring.h & gt
# include & ltstdlib.h & gt
/*包含SQL通信區域,用於處理錯誤。*/
# include & ltsqlca.h & gt
void connect();/*連接到Oracle服務器*/
void disconnect();/*與Oracle服務器斷開連接*/
void SQL _ error(char *);/*處理錯誤句柄*/
void select();/*查詢子程序*/
extern sqlglm(char *,int *,int *);
/*主程序*/
void main()
{
/*安裝錯誤處理句柄*/
exec SQL when never SQL error do SQL _ error(" Oracle error-\ n ");
/*連接到數據庫*/
connect();
/*執行查詢*/
select();
/*斷開數據庫*/
disconnect();
}
/*子程序*/
/*連接子例程connect() */
無效連接()
{
EXEC SQL BEGIN DECLARE部分;
VARCHAR用戶名[10],密碼[10],服務器[10];
EXEC SQL END DECLARE部分;
/*輸入用戶名、密碼和服務器名*/
printf(" \ n輸入用戶名:");
獲取(username . arr);
username.len=(無符號短整型)strlen((char *)username . arr);
printf(" \ n輸入密碼:");
獲取(password . arr);
password.len=(無符號短整型)strlen((char *)password . arr);
printf(" \ n輸入服務器名稱:");
獲取(server . arr);
server . len =(unsigned short)strlen((char *)server . arr);
/*連接到Oracle服務器*/
EXEC SQL CONNECT:用戶名由標識:密碼使用:server
printf(" \ n以用戶%s的身份成功連接到服務器%s!\n ",username.arr,server . arr);
}
/*斷開子例程()*/
無效斷開()
{
炭化溫度;
printf(" \ n在斷開連接之前提交所有事務嗎?(Y/N)");
scanf("%c ",& amptemp);
fflush(stdin);
if(temp!= ' Y ' & amp& amp臨時工!= 'y ')
{
/*回滾事務並斷開連接。*/
EXEC SQL回滾工作發布;
printf(" \ n回滾事務,斷開連接並退出程序!\ n \ n ");
}
其他
{
/*提交事務並斷開連接。*/
執行SQL提交工作發布;
printf(" \ n提交交易,斷開連接並退出程序!\ n \ n ");
退出(1);
}
}
/*查詢子例程select()
*首先輸入寫手代碼,然後查詢寫手姓名和工資。*/
無效選擇()
{
EXEC SQL BEGIN DECLARE部分;
char author_code[8],name[10];
浮動工資;
短薪_ ind
EXEC SQL END DECLARE部分;
printf(" \ n輸入編寫器代碼:");
獲取(author _ code);
/*查詢作者姓名和工資*/
EXEC SQL SELECT姓名,薪金INTO:姓名,:薪金:薪金_ind
來自授權
其中作者代碼=:作者代碼;
/*根據指標變量的值確定寫手的工資是否為空。*/
if (salary_ind ==0)
{
printf(" \ n作者代碼\ t作者姓名\ t作者薪金\ n ");
printf("-\ t-\ t-\ n ");
printf("%8s\t%8s\t%8.2f\n ",作者_代碼,姓名,工資);
}
其他
{
Printf("作家%s的工資沒有錄入,為空!\n ",名稱);
}
}
/*錯誤處理子例程sql_error() */
void sql_error(char *msg)
{
char err _ msg[128];
size_t buf_len,msg _ len
/*出現SQL錯誤,繼續執行。*/
每當SQLERROR繼續時執行SQL
printf("\n%s\n ",msg);
buf _ len = sizeof(err _ msg);
/*調用函數sqlglm()以獲得錯誤消息。*/
sqlglm(err _ msg & amp;buf _ len & amp;msg _ len);
printf("%。*s\n ",msg_len,err _ msg);
/*回滾事務,斷開連接並退出程序。*/
EXEC SQL回滾發布;
退出(EXIT _ FAILURE);
}