wjmiao 发表于 2008-1-28 10:50:07

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

lrd_ora8_stmt(OraStm1, "selectcount(*) from student", 1, 0, 0);
如果我想得到SELECT 语句查询的结果count(*)值该用那个函数.

wjmiao 发表于 2008-1-28 15:56:25

我知道是用lrd_ora8_fetch函数,但是不知道怎么用
那位高手能不能举个例子,把SQL查询出来的结果用LR_output_message函数输出

you力 发表于 2008-1-28 18:07:29

理论上讲有两种方法:
1.你可以把这个结果关联,把鼠标移到这个结果集,然后点击右键,会看到关联.

you力 发表于 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);

wjmiao 发表于 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};
staticunsigned long uliFetchedRows;
staticunsigned long rownum;
lrd_ora8_stmt(OraStm1, "selectcount(*) 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("Thecount is: {ROW}"));
请问楼上的PrintRow12该怎么定义.谢谢!

wjmiao 发表于 2008-1-29 10:31:19

如果在录制的脚本的基础上进行输出我已经弄好了.现在就是觉还是写的脚本好用,但是上面哪个问题不知道该怎么修改.

you力 发表于 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行而已.

wjmiao 发表于 2008-1-29 13:36:04

:) 谢谢!
按照你的意思是是不是printRow12改为printRow1就好了吗?
但是这样改提示的错误信息还是一样的啊.
能不能按照上面给的脚本帮我修改下.

wjmiao 发表于 2008-1-29 16:45:29

谢谢!
lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow12, 2, 0, 0);
中的PrintRow12改成了0就好了.
但是不太明白为什么要这样.

shirley.yang 发表于 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("Thecount is: {ROW}"));

shirley.yang 发表于 2008-8-8 11:17:36

回复 10# 的帖子

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

tanky 发表于 2009-4-22 16:18:37

请问:如果SELECT返回为空的话,怎么处理。直接去调用{ROW}会报错。

[ 本帖最后由 tanky 于 2009-4-22 16:19 编辑 ]

tanky 发表于 2009-4-26 20:55:57

自问自答:
        if (uliFetchedRows==0){       
        lr_output_message ("返回空!");
        return 0;//退出
        };

jixiangruyi 发表于 2009-4-26 23:28:26

巨牛!
页: [1]
查看完整版本: 请问通过那个函数可以得到select 查询结果的值