Pro*C 中嵌入pl/sql块
?
/* 包含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;
??? /*
???? * 定義輸入宿主變量:接收用戶名、口令和網絡服務名
???? *
???? */
?????? strcpy(username,"data_center");
??? strcpy(password,"data_center");
??? strcpy(server,"oradf1"); /*這里填寫的是數據庫的SID*/
??? /* 連接到數據庫 */
??? EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
??? if (sqlca.sqlcode==0)
??????? printf("連接成功!/n");
??? else
??????? /* 顯示連接錯誤消息 */
??????? printf("%.*s/n", sqlca.sqlerrm.sqlerrml,
??????????????? sqlca.sqlerrm.sqlerrmc);
??? /*初始化*/
??? money=0;
??? flag=0; /*用天判斷是否找到數據*/
??? /*執行plsql塊*/
??? EXEC SQL EXECUTE
??????? BEGIN
??????? SELECT salary INTO :money FROM plsqltest WHERE name='ht';
??????? :flag:=1;
??? EXCEPTION
??????? WHEN NO_DATA_FOUND THEN
??????? :answerbuff:='數據沒有找到';
??? END;
??? END-EXEC;
??? /*輸出結果*/
??? if (flag==0)
??????? printf("%s/n",answerbuff);
??? else
??????? printf("總工資是:%d/n",money);
}
?
=================================================
編譯方法:
1. 如果在PC源程序中內嵌了PL/SQL塊, SQLCHECK應該SEMANTICS或是 FULL
2. 當SQLCHECK的值是SEMANTICS或是 FULL時,必須設置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的一些選項,不加這些,有時會報錯。
gcc? -L/opt/oracle/product/10.2.0/lib -lclntsh -ldl -lm -lnsl? -o test test.c
?
===========================================
創建表:
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;
總結
以上是生活随笔為你收集整理的Pro*C 中嵌入pl/sql块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解读Facebook CAN:如何给人工
- 下一篇: 使用log4Net 输出日志到mongo