日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇)

發(fā)布時(shí)間:2024/7/23 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先對(duì)上一篇調(diào)用SQLServer的存儲(chǔ)過程作一點(diǎn)補(bǔ)充,就是如果存儲(chǔ)過程里有Insert,update,delete等操作,最后返回結(jié)果集,按示例代碼有可能得不到數(shù)據(jù),因?yàn)榉祷氐臄?shù)據(jù)有可能不在第一個(gè)結(jié)果集,需要進(jìn)行遍歷:

long lngRec = 0;

_RecordsetPtr Rs = m_Rs;?? //m_Rs為調(diào)用存儲(chǔ)過程返回的結(jié)果集

while(Rs)

{

//結(jié)果集的處理,有無數(shù)據(jù)的判斷,數(shù)據(jù)處理等

while(!m_Rs->EndOfFile)

{

//...

}

Rs = Rs->NextRecordset((VARIANT *)lngRec);

}

調(diào)用Oracle的存儲(chǔ)過程,vc的調(diào)用代碼不需要變動(dòng),但需要對(duì)Oracle的存儲(chǔ)過程和調(diào)用的SQL語句進(jìn)行一些調(diào)整。

首先,連接字符串不能用ODBC,即連接字符串不能是

"Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=Username;Pwd=asdasd;"

這種形式,而應(yīng)該是類似:

"Provider=MSDAORA.1;Password=asdasd;User ID=Username;Data Source=world;Persist Security Info=True"

然后是存儲(chǔ)過程的調(diào)整,Oracle存儲(chǔ)過程怎么返回結(jié)果集網(wǎng)上的文章已經(jīng)很多了,需要用到包,隨便摘錄一個(gè):

CREATE OR REPLACE PACKAGE pkg_test

AS

TYPE myrctype IS REF CURSOR;

PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);

END pkg_test;

/

CREATE OR REPLACE PACKAGE BODY pkg_test

AS

PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)

IS

sqlstr?? VARCHAR2 (500);

BEGIN

IF p_id = 0 THEN

OPEN p_rc FOR

SELECT ID, NAME, sex, address, postcode, birthday

FROM student;

ELSE

sqlstr :=

"select id,name,sex,address,postcode,birthday

from student where id=:w_id";

OPEN p_rc FOR sqlstr USING p_id;

END IF;

END get;

END pkg_test;

/

其實(shí)不用包也可以,直接創(chuàng)建get,只需要把最后一個(gè)參數(shù)p_rc的類型改為sys_refcursor就可以了。

最后是SQL語句的調(diào)整,SQLServer是直接get 0就可以,Oracle必須這樣調(diào)用:

{call get(0)}

即執(zhí)行:

m_Rs->Open("{call get(0)}",(IDispatch*)(m_Conn->m_Conn),adOpenStatic,????adLockReadOnly,adCmdText);

get雖然有兩個(gè)參數(shù),但是SQL語句里這個(gè)最后的輸出參數(shù)是可以不用寫的。

{call 存儲(chǔ)過程名(輸入?yún)?shù)1,輸入?yún)?shù)2,...)}這樣的SQL語句在SQLServer和Oracle是都能得到返回結(jié)果集的,因此只要把SQL語句改成這種形式,程序代碼不需要修改,就可以同時(shí)支持SQLServer和Oracle的存儲(chǔ)過程的調(diào)用了。

總結(jié)

以上是生活随笔為你收集整理的oracle数据块调用存储过程,VC调用存储过程的通用方法(ORACLE篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。