社区
C语言
帖子详情
应用程序如何调用存储过程
fanic
2007-03-01 12:59:51
请问各位大虾,在C语言的应用程序里如何调用Oracle的存储过程啊?有样本源码程序相关书籍参考么?搜了半天搜不到相关的资料.
...全文
462
11
打赏
收藏
应用程序如何调用存储过程
请问各位大虾,在C语言的应用程序里如何调用Oracle的存储过程啊?有样本源码程序相关书籍参考么?搜了半天搜不到相关的资料.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenwenya
2007-03-21
打赏
举报
回复
用短信猫做短信平台,比较稳定,不受网络安全影响,响应及时,适合一些重要的安全性高的业务需求,但是发送速度有限制,一般是800条/小时
sp短信通道发送速度快,但是由于接入的开发商很多,在服务器不多的情况下,必然会排队,有时繁忙时提交一条短信,第二天才能收到,而且网络不正常时,也会影响使用
建议一些管理软件用短信猫做短信平台
1.方寸GSM-Modem 短信平台
GSM-Modem 短信平台,无需联网,只需一台电脑,一个短信猫(或手机),一个短信开发接口,就可轻松建立短信服务器,可实现短信收发,短信互动等功能,一台电脑可以连接多个短信猫硬件,从而提高吞吐量。
2.方寸短信数据库接口(手机短信接口,短信二次开发控件)
通过本数据库接口,能使你现有的系统(如OA、CRM、ERP等系统)轻松实现无线办公功能,无论你用的是哪种开发语言(VB\VC\VFP\asp\jsp\java\pb\delphi...),只要你的系统能读写数据库即可对接!你仅需要在指定的表中添加记录,本接口程序就自动进行发送短信了,收到的短信会自动保存到数据库里,所以,您不需要了解任何有关数据通信方面的知识,就可实现手机短信的收发等功能!
电话:0755-25996144
联系人:陈先生
网址:http://www.fcwww.com
qq:393376247
Baku
2007-03-01
打赏
举报
回复
连Proc都不想用的话,可以用oracle提供的oci 自己写一套纯C 的
bgqy2000
2007-03-01
打赏
举报
回复
强
jixingzhong
2007-03-01
打赏
举报
回复
楼主看看 Pro C 相关知识
jixingzhong
2007-03-01
打赏
举报
回复
[引用]
部分测试代码
1.3.1 测试表脚本:
创建用于查询的表
drop table tb_boardt;
create table tb_boardt(
BYBOARDTYPE NUMBER(3),
ABYBOARDNAME VARCHAR2(15)
) tablespace cm_space;
用储存过程向表中插入需要查询的120000记录:)
declare
i integer :=0;
begin
for i in 1..20000 loop
insert into tb_boardt values(1,'Allen_BOARD');
insert into tb_boardt values(2,'LILY_BOARD');
insert into tb_boardt values(4,'LIL_BOARD');
insert into tb_boardt values(5,'ALLEN_BOARD');
insert into tb_boardt values(6,'BEMC_BOARD');
insert into tb_boardt values(7,'TWIM_BOARD');
commit;
end loop;
end;
/
用于读取记录的存储过程包头
create or replace package testEptTbl as
type charArrayType is table of varchar2(2048)
index by binary_integer;
type lcharArrayType is table of varchar2(2048)
index by binary_integer;
type numArrayType is table of int
index by binary_integer;
num INTEGER;
m_RncID INTEGER;
procedure get_R0BrdLib(
batch_size in integer,
found in out integer,
done_fetch out integer,
BoardType1 out numArrayType,/*单板类型Board Type*/
BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/);
end testEptTbl;
/
show err
用于记录的存储过程包体
create or replace package body testEptTbl as
/* 3 */
cursor CUR_R0BrdLib is
SELECT BYBOARDTYPE,ABYBOARDNAME FROM tb_boardt;
procedure get_R0BrdLib(
batch_size in integer,
found in out integer,
done_fetch out integer,
BoardType1 out numArrayType,/*单板类型Board Type*/
BoardName1 out charArrayType/*各子单元类型包含的子单元个数Sunit Number Per Type*/) is
begin
if not CUR_R0BrdLib%isopen then
open CUR_R0BrdLib;
end if;
done_fetch := 0;
found := 0;
for i in 1..batch_size loop
fetch CUR_R0BrdLib
into BoardType1(i),BoardName1(i);
if CUR_R0BrdLib%notfound then
close CUR_R0BrdLib;
done_fetch := 1;
exit;
else
found := found + 1;
end if;
end loop;
end get_R0BrdLib;
end testEptTbl;
/
show err
1.3.2 游标方式:
//倒出数据到zdb
void CBOARDT::WriteZdb(int SubNetID,int NodeBID)
{
EXEC SQL BEGIN DECLARE SECTION;
int iSubNetID = SubNetID;
int iNodeBID = NodeBID;
EXEC SQL END DECLARE SECTION;
char tmpbuf[128],StartTime[256],EndTime[256];
/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();
/* Display operating system-style date and time. */
_strtime( tmpbuf );
sprintf( StartTime,"OS time:\t\t\t%s\n", tmpbuf );
/* Declare a cursor for the FETCH. */
EXEC SQL DECLARE CUR_R_BOARDT CURSOR FOR
SELECT byBoardType, abyBoardName FROM TB_BOARDT;
EXEC SQL OPEN CUR_R_BOARDT;
/* Initialize the number of rows. */
num_ret = 0;
int rows_ret=BATCHSIZE;
while (BATCHSIZE == rows_ret)
{
// Fetch from the Cursor, catching all ORA ERROR condition
EXEC SQL WHENEVER SQLERROR DO sqlerror(m_dbheader);
EXEC SQL FETCH CUR_R_BOARDT INTO
:bHostVar1,:chHostVar1;
/* Write however many rows were returned. */
rows_ret=sqlca.sqlerrd[2] - num_ret;
WriteBatchToZdb(rows_ret,"b01c01");
num_ret = sqlca.sqlerrd[2]; /* Reset the number. */
}
/* Write remaining rows from last fetch, if any. */
if ((sqlca.sqlerrd[2] - num_ret) > 0)
WriteBatchToZdb(sqlca.sqlerrd[2] - num_ret,"b01c01");
m_dbheader.dbTupleNum=sqlca.sqlerrd[2];
EXEC SQL CLOSE CUR_R_BOARDT;
_strtime(tmpbuf);
sprintf(EndTime,"OS time:\t\t\t\t%s\n", tmpbuf );
printf("begin time: %s\n",StartTime);
printf("end time: %s\n",EndTime);
WriteZdbHeader();
}
1.3.3 存储过程方式:
//倒出数据到zdb
void CBRDLIB::WriteZdb(int SubNetID,int NodeBID)
{
DWORD TupleNum=0;
char tmpbuf[128],StartTime[256],EndTime[256];
/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();
/* Display operating system-style date and time. */
_strtime( tmpbuf );
sprintf( StartTime,"OS time:\t\t\t%s\n", tmpbuf );
do
{
EXEC SQL EXECUTE
BEGIN testEptTbl.get_R0BrdLib
(:array_size, :num_ret, :done_flag,:bHostVar1,:chHostVar1);
END;
END-EXEC;
TupleNum=TupleNum+num_ret;
// print_rows(num_ret);
WriteBatchToZdb(num_ret,"b01c01");
}while(!done_flag);
m_dbheader.dbTupleNum=TupleNum;
_strtime(tmpbuf);
sprintf(EndTime,"OS time:\t\t\t\t%s\n", tmpbuf );
printf("brdlib begin time: %s\n",StartTime);
printf("end time: %s\n",EndTime);
WriteZdbHeader();
}
/*-------------CTable Factory-----------------*/
CTable* CTable::Factory(int type)
{
switch( type )
{
//R0
case 2 :
return new CBOARDT;
break;
case 1 :
return new CBRDLIB;
break;
}
return NULL;
}
jixingzhong
2007-03-01
打赏
举报
回复
http://topic.csdn.net/t/20050727/13/4171253.html
trueadou
2007-03-01
打赏
举报
回复
用ADO做成动态库,然后用C调用
fanic
2007-03-01
打赏
举报
回复
ADO的方法是面向对象的, C语言的应用程序不支持啊.
Baku 兄的方法倒是一个可行的法子. 不过这样太牵强了吧.难道C语言不提供存储过程的调用?
郁闷
Baku
2007-03-01
打赏
举报
回复
用 ProC 写,EXEC SQL EXECUTE ,然后用oracle 的编译器变成c 语言 ,哈哈 。自己写难道太高了
Estfania
2007-03-01
打赏
举报
回复
一般来讲有两种方式(ADO):
1、使用Recordset的Open方法,指定存储过程为Source
2、使用ADO Command对象
首先通过Command对象与目地数据库建立连接;然后调用方法Excute,返回Recordset
FingerStyle
2007-03-01
打赏
举报
回复
LZ好强啊...
Google Android SDK开发范例大全(PDF高清完整版3)(4-3)
2.3 Android
应用
程序
架构——从此开始 2.4 可视化的界面开发工具 2.5 部署
应用
程序
到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色...
Google Android SDK开发范例大全(PDF完整版4)(4-4)
2.3 Android
应用
程序
架构——从此开始 2.4 可视化的界面开发工具 2.5 部署
应用
程序
到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色...
Google Android SDK开发范例大全(PDF高清完整版1)(4-1)
2.3 Android
应用
程序
架构——从此开始 2.4 可视化的界面开发工具 2.5 部署
应用
程序
到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色...
java
调用
存储
过程
执行顺序执行_Java
调用
存储
过程
,你应该好好了解一下
原标题:Java
调用
存储
过程
,你应该好好了解一下
存储
过程
是指保存在数据库并在数据库端执行的
程序
。你可以使用特殊的语法在Java类中
调用
存储
过程
。在
调用
时,
存储
过程
的名称及指定的参数通过JDBC连接发送给DBMS,执行...
Java
调用
存储
过程
长时间未执行完问题-解决方案
上午在生产服务器发现一个不小的问题,就是一个
程序
在
调用
存储
过程
中抢到了锁,但抢到锁后
调用
存储
过程
执行出现卡死的情况,导致抢到的锁迟迟没有释放,这导致第二天
程序
执行时,因为无法获取到锁而无法正常执行。...
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章