PROC程式設計

2022-05-07 16:36:06 字數 3951 閱讀 9899

通過在過程化程式語言中嵌入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...