/*
達內學習 Oracle day43 2013-11-1
*/
1,什麼是pro程序
通過在過程化編程語言中 嵌入sql語句開發出的應用程序叫pro程序。
2,爲什麼使用proc
用C或者C++這種高效的語言成爲訪問oracle數據庫的工具。
3,寫一個c程序的步驟
a,編寫源代碼 vi
b,編譯 gcc .c
c,鏈接 gcc .o
d,執行
4,寫一個proc程序的步驟
a,編寫源代碼 **.pc
b,預編譯 proc **.pc 生成.c
c,編譯 鏈接
gcc **.c -lclntsh ;linux
gcc **.c -lorasql10 ; windows
d,執行程序 生成 a.out
/*
source 生效
ftp 192.168.0.23
openlab open123
cd 1308proc
mget gftp*
y y */
--------------------------------------
宿主語言 :sql語句所嵌入的語言
使用宿主語言定義的變量,叫做宿主變量
宿主變量既能在sql語句中使用又能在宿主語言中使用。
宿主變量要放入申明區
linux,unix 如果是開發c程序 則任何位置都是申明區。
exec sql begin declare section;
/* 這就是申明區*/
exec sql end declare section;
【註釋/* 兩端要加空格 */】
宿主變量的類型
char
char var[n] 定長字符串
short
int
long
float
double
varchar var[n] 變長字符串
-----------------------------------------------
a,使用varchar處理變長字符串
char--------varchar
在sql語句中使用varchar數據類型時,要和普通定長字符串一樣使用
在宿主語言中,使用變長字符串數據時,要使用變長字符串變量arr成員 取得長度使用len成員
varchar var[20]={0};
var.arr[var.ken]='\0';
b,使用proc的預編譯選項
proc iname 輸入文件文件可以忽略
oname 輸出文件名
char_map=charz 默認 定長 空格補齊 \0結尾
= varchar2|charf 定長 空格補齊
= string 變長 \0 結尾
宿主變量使用注意事項:
1, DDL中不能使用宿主變量
2, 宿主變量可以使用指針,但是需要分配內存,不推薦
3,宿主變量 如果是C++開發 則要求把宿主變量放入申明區
4,在sql語句使用宿主變量時,要求在宿主變量前面加:
----------------------------------------
提示變量:當數據庫中的字段 賦值給宿主變量時,賦值的狀態可以通過指示變量得到。
== 0 表示賦值成功
== -1 代表數據庫中的值是空值
>0 代表截斷賦值 儘量避免
提示變量必須是short類型
int mid = 0;
short indmid =0;
exec sql select manager_id into :mid:indmid
from s_emp where id =1;
或者
exec sql select manager_id into :mid indicator :indmid
from s_emp where id =1;
-----------------------------------------------------------------------------
數組變量:存放多條數據
proc只支持一維數組,但是字符除外
不支持數組指針
最大元素個數32768
在select 語句中使用數組時,只能給出數組名,不能給下標
s_emp 表中所有的manager_id 和所有的first_name 分別放入數組中,要求指示manager_id的賦值狀態
sqlca.sqlerrd[2] sql語句影響的函數
本質上sqlca是一個結構體,這個結構體我們稱爲通信區。
在同一個事務中,同一個事務中都有一個通信區,每執行一次sql,就會把通信區中的每個字段都修改一次。
sqlca.sqlcode
==0 sql語句執行正常
>0 異常發生 一般是違反約束
<0 系統錯誤,或者網絡錯誤
sqlca.sqlerrm.sqlerrmc sql錯誤消息.內容