51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4062|回复: 13
打印 上一主题 下一主题

[原创] 请问通过那个函数可以得到select 查询结果的值

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-1-28 10:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lrd_ora8_stmt(OraStm1, "select  count(*) from student", 1, 0, 0);
如果我想得到SELECT 语句查询的结果count(*)值该用那个函数.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-1-28 15:56:25 | 只看该作者
我知道是用lrd_ora8_fetch函数,但是不知道怎么用
那位高手能不能举个例子,把SQL查询出来的结果用LR_output_message函数输出
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-1-28 18:07:29 | 只看该作者
理论上讲有两种方法:
1.你可以把这个结果关联,把鼠标移到这个结果集,然后点击右键,会看到关联.
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-1-28 18:15:41 | 只看该作者
理论上你试一下:用lrd_ora8_fetch这个函数,我们来分析一下这个函数,里面有一个参数是mpuliFetchedRows,这个参数是一个指针,但是这个指针指向你的结果.
我可以这样取。
lrd_ora8_fetch(OraStm3, -75, 15, count, PrintRow11, 2, 0, 0);
我们再在脚本上最前面定义一下这个参数,
unsigned long i=0;
   unsigned long * const count = &i;

你再用输出lr_out_message 的 i值看看~
直接点吧
unsigned long i=0;
lrd_ora8_fetch(OraStm3, -75, 15, &i, PrintRow11, 2, 0, 0);
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-1-29 10:27:47 | 只看该作者
前提是数据库已经连接成功,下面是按照按照论坛中的测试ORACLE方法写的脚本.调试的时候老是提示:
Action.c (69): undeclared identifier `PrintRow12'
Action.c (69): type error in argument 6 to `lrdfnc_ora8_fetch'; found `int' expected `pointer to int function(const pointer to void,const unsigned long)'
d:\\tool\\loadrunner\\scripts\\aa1\\\\combined_aa1.c (5): 2 errors, not writing pre_cci.ci
脚本如下:
static LRD_VAR_DESC                    NUM =
   {LRD_VAR_DESC_EYECAT, 15, 23, LRD_DBTYPE_ORACLE, {1, 1, 0},
      DT_NUMERIC};
static  unsigned long uliFetchedRows;
static  unsigned long rownum;
lrd_ora8_stmt(OraStm1, "select  count(*) NUM from student", 1, 0, 0);
lrd_ora8_exec(OraSvc1, OraStm1, 0, 0,&rownum, 0, 0, 0, 0, 1);
lrd_ora8_bind_col(OraStm1, &OraDef1, 1, &NUM, 0, 0);
  lrd_ora8_save_col (OraStm1, 1, 1, 0, "ROW");
lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow12, 2, 0, 0);
  lr_output_message("value : %s",  lr_eval_string("The  count is: {ROW}"));
请问楼上的PrintRow12该怎么定义.谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2008-1-29 10:31:19 | 只看该作者
如果在录制的脚本的基础上进行输出我已经弄好了.现在就是觉还是写的脚本好用,但是上面哪个问题不知道该怎么修改.
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-1-29 11:06:21 | 只看该作者
你知道为什么会输出好了么?因为你用关联了,lrd_ora8_save_col (OraStm1, 1, 1, 0, "ROW"); ,把这count(*) 关联到了ROW上.
lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow12, 2, 0, 0);你知道为什么printRow12?
如果你是count(*)肯定不会是printRow12的,printRow12是意思说,假如你这个语句会执行一堆结果,他让你的结果下只显示12行而已.
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-1-29 13:36:04 | 只看该作者
谢谢!
按照你的意思是是不是printRow12改为printRow1就好了吗?
但是这样改提示的错误信息还是一样的啊.
能不能按照上面给的脚本帮我修改下.
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-1-29 16:45:29 | 只看该作者
谢谢!
lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow12, 2, 0, 0);
中的PrintRow12改成了0就好了.
但是不太明白为什么要这样.
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-8-8 10:31:05 | 只看该作者
我也遇到同样的问题,按照两位搂主的方法试过了,但是好以下错误,我都弄了好几天了~在线等啊,急死我了
Action.c (42): undeclared identifier `OraDef1'
Action.c (42): type error in argument 3 to `lrdfnc_ora8_bind_col'; found `pointer to int' expected `const pointer to pointer to void'
Action.c (44): undeclared identifier `PrintRow0'
Action.c (44): type error in argument 6 to `lrdfnc_ora8_fetch'; found `int' expected `pointer to int function(const pointer to void,const unsigned long)'
c:\\documents and settings\\administrator\\\327\300\303\346\\oracle_blank\\oracle_blank\\\\combined_Oracle_blank.c (5): 4 errors, not writing pre_cci.ci
我的数据库版本orcale9i,lr版本8.1.4
代码如下:
static void FAR *       OraEnv1;
static void FAR *       OraSvc1;
static void FAR *       OraSrv1;
static void FAR *       OraSes1;
static void FAR *       OraStm1;
static LRD_VAR_DESC                    NUM =
   {LRD_VAR_DESC_EYECAT, 15, 23, LRD_DBTYPE_ORACLE, {1, 1, 0},
      DT_NUMERIC};
Action()
{
        unsigned long rownum;
        unsigned long uliFetchedRows;
  lrd_init(&InitInfo, DBTypeVersion);
        lrd_initialize_db(LRD_DBTYPE_ORACLE, 2, 0);
    lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0);
    lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0);
    lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0);
    lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0);

    lrd_server_attach(OraSrv1, "test", -1, 0, 0);
        lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0);

        lrd_ora8_attr_set(OraSes1, USERNAME, "test", -1, 0);
         lrd_ora8_attr_set(OraSes1, PASSWORD, "test12", -1, 0);

        lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0);

        lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0);
        lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1,0);

//设定查询
        lrd_ora8_stmt(OraStm1, "select count(*) from pb_agent_list\n", 1, 32, 0);
//执行查询
        lrd_ora8_exec(OraSvc1, OraStm1, 0, 0,&rownum, 0, 0, 0, 0, 1);
        lrd_ora8_bind_col(OraStm1, &OraDef1, 1, &NUM, 0, 0);
        lrd_ora8_save_col (OraStm1, 1, 1, 0, "ROW");
        lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow0, 2, 0, 0);
        lr_output_message("value : %s",  lr_eval_string("The  count is: {ROW}"));
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-8-8 11:17:36 | 只看该作者

回复 10# 的帖子

继续问题~
为什么我手工写的代码就不可以。
我把从oracale自带的sqlplus录制的脚本按照搂主的参数修改了一下就可以了呢?
感觉录制的脚本里,oracle就自己生成了类似于"OraDef1",“PrintRow0”的参数。
那位高手指点N下阿。
还有为什么在我的脚本里lr_output_message和lr_ora8_print都不起作用呢,都没有运行呢???
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2009-4-22 16:18:37 | 只看该作者
请问:如果SELECT返回为空的话,怎么处理。直接去调用{ROW}会报错。

[ 本帖最后由 tanky 于 2009-4-22 16:19 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2009-4-26 20:55:57 | 只看该作者
自问自答:
        if (uliFetchedRows==0){       
        lr_output_message ("返回空!");
        return 0;//退出
        };
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2009-4-26 23:28:26 | 只看该作者
巨牛!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-14 11:05 , Processed in 0.140321 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表