OTL调用Oracle存储过程
OTL很早前用过,今天写东西要调存储过程,程序写完了,调试死活通不过,折腾了一早晨。
最后才发现错误,这里总结一下:
1、代码写的不规范。
有个参数后边少写了个“,”以至于总是抱错。而单独写的测试例子就没问题,后来一步一步跟踪了后才发现。
2、调用格式
a、如果#define OTL_ORA9I // Compile OTL 4/OCI8编译
则过程调用采用:
begin
过程名(:参数1<类型,in|out|inout>,:参数2<类型,in|out|inout>,.....);
end;
的形式,和在pl/sql中一样。
b、如果用#define OTL_ODBC // Compile OTL 4.0/ODBC编译
则用常规的形式:
{call my_proc("
" :A<int,inout>, "
" :B<char[31],out>, "
" :C<char[31],in> "
")}"
3、附文档中给出的测试代码
// 创建存储过程
/*
Create Or Replace Procedure Test(P1 In Number, P2 In Number, P3 Out Number) Is
Begin
P3 := P1 + P2;
End Test;
*/
//调用代码
#include <iostream>
using namespace std;
#include <stdio.h>
#define OTL_ORA9I//OTL_ODBC // Compile OTL 4.0/ODBC
#include <otlv4.h>
#pragma comment(lib,"oci.lib")
otl_connect db; // connect object
void stored_proc1(void)
// invoking stored procedure
{
otl_stream o(1, // buffer size should be equal to 1 in case of stored procedure call
"begin my_proc("
":a1<int,inout>,"
":b1<char[31],out>, "
":c2<char[31],in> "
");end;",
// stored procedure call
db // connect object
);
o.set_commit(0); // set stream auto-commit off since
// the stream does not generate transaction
o<<1<<"Test String1" // assigning :1 = 1, :3 = "Test String1"
int a;
char b[31];
o>>a>>b;
cout<<"A="<<a<<", B="<<b<<endl;
}
void stored_proc2(void)
// invoking stored procedure
{
char* call_sql = "Begin test("
":1<int,in>,"
":2<int,in>,"
":3<int,out>);end;"
otl_stream o(1,call_sql,db);
int a=1;
int b=3;
o<<a<<b; // assigning :1 = 1, :3 = "Test String1"
int c;
o>>c;
cout<<"A="<<a<<", B="<<b<<", C="<<c<<endl;
}
int main()
{
otl_connect::otl_initialize(); // initialize environment
try{
//CString str_conn;
db.rlogon(user/pwd@server); //更换到对应值
otl_cursor::direct_exec
(
db,
"CREATE OR REPLACE PROCEDURE my_proc "
" (A IN OUT NUMBER, "
" B OUT VARCHAR2, "
" C IN VARCHAR2) "
"IS "
"BEGIN "
" A := A+1; "
" B := C; "
"END;"
); // 也可以直接用代码创建来测试用的过程
stored_proc1(); // invoking stored procedure
stored_proc2();
}
catch(otl_exception& p)
{
// intercept OTL exceptions
cerr<<p.msg<<endl; // print out error message
cerr<<p.code<<endl; // print out error code
cerr<<p.var_info<<endl; // print out the variable that caused the error
cerr<<p.sqlstate<<endl; // print out SQLSTATE message
cerr<<p.stm_text<<endl; // print out SQL that caused the error
}
db.logoff(); // disconnect from the data source
getchar();
return 0;
}
OTL调用Oracle存储过程的更多相关文章
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
- C#调用 oracle存储过程
C#调用oracle 存储过程与调用Sql server存储过程类似,比较简单:直接给出示例: /// <summary> /// 判断物料类型是不是总部管控 /// </summa ...
- 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- c#调用oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- C#调用Oracle存储过程的方法
C#调用Oracle存储过程的方法 准备: 环境:pl/sql+oracle9i+vs2008 创建表test: create table TEST( ID NUMBER,//编号 NA ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- python调用oracle存储过程
oracle 存储过程 python调用oracle存储过程 -- 通过cx_Oracle连接 import cx_Oracle # 连接数据库 orcl_engine = 'scott/s123@x ...
随机推荐
- 吐槽 MySQL数据库jdbc操作,varchar类型占位符问题——单引号造孽
很长时间不写代码动手能力明显下降很多常见的错误还是经常发生,今天吐血了一次. 简单的坑总是要多跳几次才能甘心.很清晰的记得大学的时候在此坑差点闷死,现在又跳进这个坑了,搞了半天终于知道错在哪里. St ...
- UnsatisfiedLinkError X.so is 64-bit instead of 32-bit之Android 64 bit SO加载机制
http://blog.csdn.net/canney_chen/article/details/50633982 今天用户反馈应用闪退崩溃了.然后找呀找… 过程原来是这样的: 还是说下项目背景 应用 ...
- gstreamer——文档/资源/使用
http://gstreamer.freedesktop.org/src/ http://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gs ...
- dll和lib
lib:里面包含了很多源代码,工程会将这些源代码加入自己的项目中编译: dll:动态编译库,允许可执行文件在运行中加载里面的资源. 使用lib需注意两个文件:(1).h头文件,包含lib中说明输出的类 ...
- ubuntu ssh免密码登录
目前很多服务(ceph,openstack等)都需要用到SSH使用ssh-key进行登录,而不能使用密码进行登录. 下面是配置步骤: 一.在SSH Client生成ssh key pair root@ ...
- POJ 1459 网络流 EK算法
题意: 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 2 1 1 2 表示 共有2个节点,生产能量的点1个,消耗能量的点1个, 传递能量的通道2条:(0,1)20 (1,0) ...
- Excel下载打不开
1.问题描述:今天遇到个问题,对于定时发送邮件,前两天还正常,今天发现邮件能收到,但打不开,显示如下错误: 预览邮件显示: 点击Excel打开,显示如下: 2.问题解决方案 删除对于服务器上部分空间内 ...
- LeetCode——Construct Binary Tree from Inorder and Postorder Traversal
Question Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may a ...
- mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)
http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...
- RPM和yum相关
写在前面: 在这里可以知道rpm和yum的基本用法,找到更新本地yum源.搭建yum源的方法以及yum很琐碎的东西,包括yum源的优先级.用yum来安装或卸载CentOS图形界面包以及保存yum下载的 ...