共計(jì) 1634 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
今天就跟大家聊聊有關(guān) Pro* C 中怎樣嵌入 pl/sql 塊,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
/* 包含 C 頭文件 */
#include stdio.h
#include string.h
#include stdlib.h
/* 包含 SQLCA 頭文件 */
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE sqlda;
int main()
{
EXEC SQL BEGIN DECLARE SECTION;
int money;
char answerbuff[200];
int flag;
char username[10],password[10],server[10];
EXEC SQL END DECLARE SECTION;
/*
* 定義輸入宿主變量: 接收用戶名、口令和網(wǎng)絡(luò)服務(wù)名
*
*/
strcpy(username, data_center
strcpy(password, data_center
strcpy(server, oradf1 /* 這里填寫的是數(shù)據(jù)庫(kù)的 SID*/
/* 連接到數(shù)據(jù)庫(kù) */
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
if (sqlca.sqlcode==0)
printf(連接成功!/n
else
/* 顯示連接錯(cuò)誤消息 */
printf(%.*s/n , sqlca.sqlerrm.sqlerrml,
sqlca.sqlerrm.sqlerrmc);
/* 初始化 */
money=0;
flag=0; /* 用天判斷是否找到數(shù)據(jù) */
/* 執(zhí)行 plsql 塊 */
EXEC SQL EXECUTE
BEGIN
SELECT salary INTO :money FROM plsqltest WHERE name= ht
:flag:=1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
:answerbuff:= 數(shù)據(jù)沒有找到
END;
END-EXEC;
/* 輸出結(jié)果 */
if (flag==0)
printf(%s/n ,answerbuff);
else
printf(總工資是:%d/n ,money);
}
=================================================
編譯方法:
1. 如果在 PC 源程序中內(nèi)嵌了 PL/SQL 塊,SQLCHECK 應(yīng)該 SEMANTICS 或是 FULL
2. 當(dāng) SQLCHECK 的值是 SEMANTICS 或是 FULL 時(shí),必須設(shè)置 USERID
proc PARSE=NONE include=-I/opt/oracle/product/10.2.0/precomp/public include=-I/opt/oracle/product/10.2.0/rdbms/public sqlcheck=fullUSERID=data_center/data_center@oradf1 iname=test.pc oname=test.c
gcc 的一些選項(xiàng),不加這些,有時(shí)會(huì)報(bào)錯(cuò)。
gcc -L/opt/oracle/product/10.2.0/lib -lclntsh -ldl -lm -lnsl -o test test.c
===========================================
創(chuàng)建表:
create table PLSQLTEST
(
salary NUMBER,
NAME VARCHAR2(10)
);
insert into plsqltest (salary, NAME)
values (1000, xym
insert into plsqltest (salary, NAME)
values (2000, ht
commit;
看完上述內(nèi)容,你們對(duì) Pro* C 中怎樣嵌入 pl/sql 塊有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝大家的支持。