通過在過程化程式語言中嵌入sql語句而開發出的應用程式稱為pro程式。
在c/c++語言中嵌入sql語句而開發出的應用程式稱為pro*c/c++程式。
–在通用程式語言中使用的sql稱為嵌入式sql;
–在sql標準中定義了多種語言的嵌入式sql。
宿主語言 pro程式
c/c++ pro*c/c++
fortran pro*fortran
pascal pro*pascal
cobol pro*cobol
proc/c++預編譯程式
–完成pc源程式到c/c++源程式的轉換。
基本命令格式
proc iname=filename [optionname1=value1]…[optionnamen=valuen]
proc常用選項說明選項值
說明iname
filename
proc原始檔名稱
include
pathname
指示proc去**找#include中包含的標頭檔案
oname
filename
預編譯完成後輸出檔名稱
cpool
yes,no
是否支援連線共享
mode
ansi,iso,oracle
**對 oracle 或 ansi 規則的順應性
code
ansi_c,cpp,kr_c
所要生成的**型別
parse
full,paritial,none
控制對哪一 非 sql **進行語法分析
threads
yes,no
是否支援多執行緒的應用程式
–在命令列輸入不帶選項的proc命令就可以列出所有選項以及當前預設值
–proc 選項=?就可以檢視選項說明
gcc或者g++鏈結時需要增加
-l$/lib –lclntsh
指示編譯器需要鏈結相關的庫檔案
開發之前先寫乙個適合proc使用的makefile
首先定義幾個常量.suffixes: .c .o
cc=gcc
proc=proc
procsrcs=oracle.pc
srcs=$(procsrcs:.pc=.c)
objs=$(srcs:.c=.o)
oracle_home=/opt/oracle/product/11.2.0
oraflags1=/usr/include/linux
oraflags2=/usr/lib/gcc/i686-redhat-linux/4.4.4/include
定義編譯命令exec=abc
all: $(objs)
$(cc) -l$/lib -lclntsh -o $(exec) $(objs)
@echo
'^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ok ^_^ ^_^ ^_^ ^_^ ^_^ ^_^
'.c.o: $(srcs)
$(cc) -wall -g -o $@ -c $<$(srcs):
$ iname=$(procsrcs) include=$(oraflags1) include=$(oraflags2) cpool=yes mode=ansi code=ansi_c parse=partial threads=yes oname=$(srcs)
clean:
rm -f $(objs)
rm -f $(srcs)
使用proc程式設計步驟
–標頭檔案包含和相關說明定義;
–安裝錯誤處理函式;
–初始化資料庫;
–連線到資料庫;
–執行sql語句;
–斷開連線;
–釋放相關資源。
pc檔案的編寫
首先包含三個最基本的標頭檔案
#include
#include
#include
pc檔案中如果在內嵌sql語句中使用的變數,一定需要在exec sql begin declare section塊語句中申明:
exec sql begin declare section;
sql_context pcontext;
long sqlcode;
exec sql end declare section;
安裝錯誤處理函式:extern
void sqlglmt(void*, char*, size_t*, size_t*);
void
sql_error()
初始化資料庫:void
sql_init()
連線到資料庫:int sql_connect(const
char *user, const
char *password, const
char *dbname)
else
return0;
}
執行乙個非select sql語句:int sql_exec(const
char *dysql)
else
}
提交事務:intsql_commit()
else
}
回滾事務:intsql_rollback()
else
}
執行乙個select語句,並檢視返回結果(一):int sql_open(const
char *dysql)
執行乙個select語句,並檢視返回結果(四):exec sql declare c cursor for s;
exec sql open c using descriptor :sinput;
/*選擇輸出區域
*/exec sql describe output s using descriptor :soutput;
/*取得選擇列表的個數
*/exec sql get descriptor :soutput :ioutput_count =count;
for(i=0;i)
執行乙個select語句,並檢視返回結果(五):exec sql whenever not found do break;
while(1
)
else
}printf("\n
");}
執行乙個select語句,並檢視返回結果(六):exec sql close c;
exec sql deallocate descriptor :soutput;
exec sql deallocate descriptor :sinput;
return0;
}
斷開連線:intsql_disconnect()
else
}
intsql_free()
else
}
main函式呼叫的例子:intmain()
複製去google翻譯
pro c程式設計基礎
1.連線到資料庫 char oid a exec sql connect oid 2.靜態sql語句 varchar emp name 20 exec sql select ename into emp name from emp where empno 7499 3.使用游標 struct per...
資料庫(proc程式設計)
1 proc是什麼?proc是oracle用來預編譯嵌入sql語句的c程式。下圖展示了proc c c 程式的編寫 編譯流程。根據上圖可以看出proc只是預編譯一下源程式,即把 pc預編譯成標準的c或c 程式。2 怎樣編譯 鏈結 pc應用程式?本文以linux環境為例,首先要保證c c 的編譯器 g...
資料庫 Proc程式設計一
proc程式設計 嵌入式sql sql寫入到c語言程式中 proc程式設計標頭檔案路徑 11.2.0 dbhome 1 precomp public proc程式設計要注意proc編譯器也會使用gcc編譯器中的標頭檔案,所以需要在proc編譯器中進行配置,加上系統的標頭檔案路徑 11.2.0 dbh...