免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2462 | 回复: 13
打印 上一主题 下一主题

Oracle Pro*c入门问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-15 12:52 |只看该作者 |倒序浏览
没用过Pro*c
高手指点一下吧
我想写个执行SQL语句的函数
大致看起来是下面那个样子
但是遇到一个问题
标记了XXX的那一行必须写一个SQL语句才行
不然就编译错误
我想在那里放sql_str那个变量
这样就可以传进来什么SQL就执行什么SQL
请问这个怎么写?
谢谢

  1. char *exec_query(char *sql_str, int *col_len)
  2. {
  3.         exec sql whenever sqlerror continue;
  4.         exec sql whenever not found do break;
  5.         exec sql declare cur3 cursor for
  6.                 select a,b from t1;   //XXX
  7. ...
  8. ...
  9. ...
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-05-15 13:00 |只看该作者

EXEC SQL BEGIN DECLARE SECTION;
                char            lvar[20];
                char            lsql[512];
EXEC SQL END DECLARE SECTION;
sprintf(lsql, "select  resfrom xxx where RESULT",xxxx);
下面的话就用游标等来实现吧,挺简单的,呵呵。
EXEC SQL FETCH lsqlcur INTO :lvar;

论坛徽章:
0
3 [报告]
发表于 2007-05-15 13:06 |只看该作者
谢就一个字....

论坛徽章:
0
4 [报告]
发表于 2007-05-15 13:06 |只看该作者
只是简单说一个谢字太轻了











































再说一个吧
谢了!

论坛徽章:
0
5 [报告]
发表于 2007-05-15 13:28 |只看该作者
再问一下
那个游标该怎么定义呢?

论坛徽章:
0
6 [报告]
发表于 2007-05-15 13:33 |只看该作者
我这样写的
有错误


  1. EXEC SQL BEGIN DECLARE SECTION;
  2.                 char            lvar[20];
  3.                 char            lsql[512];
  4.         EXEC SQL END DECLARE SECTION;
  5.         strcpy(lsql, sql_str);
  6.         exec sql declare cur3 cursor for
  7.                  lsql;
  8.         exec sql open cur3;
  9. ...
  10. ...
  11. ...
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2007-05-15 13:34 |只看该作者
Oracle 动态 SQL 要比 DB2 的稍微麻烦一点点。
其实作为 select 来讲,最难的不是如何去执行它,而是如何去获得它执行的效果——结果集。
你打算以什么样的形式获得结果集?

我这里有封装好的函数。
对于单条记录的,返回一个 name => value 对的链表。
对于多条记录的,将每一行记录作为一个链表调用一个回调函数。
但在有些情况下,并不适合用回调函数。
C 里面有没有 Python 的生成器,所以还得提供另一套接口。
不过因为我的程序里用不到,也就这样了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-05-15 13:35 |只看该作者
要先 prepare 一把才行。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2007-05-15 13:35 |只看该作者
算了,不聊了,反正该帖也会被伟大的 langue 版主转到 Oracle 版。

论坛徽章:
0
10 [报告]
发表于 2007-05-15 13:41 |只看该作者
LZ看一下$ORACLE_HOME//precomp/demo/proc目录下的sample
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP