请问通过那个函数可以得到select 查询结果的值
lrd_ora8_stmt(OraStm1, "selectcount(*) from student", 1, 0, 0);如果我想得到SELECT 语句查询的结果count(*)值该用那个函数. 我知道是用lrd_ora8_fetch函数,但是不知道怎么用
那位高手能不能举个例子,把SQL查询出来的结果用LR_output_message函数输出 理论上讲有两种方法:
1.你可以把这个结果关联,把鼠标移到这个结果集,然后点击右键,会看到关联. 理论上你试一下:用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); 前提是数据库已经连接成功,下面是按照按照论坛中的测试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该怎么定义.谢谢! 如果在录制的脚本的基础上进行输出我已经弄好了.现在就是觉还是写的脚本好用,但是上面哪个问题不知道该怎么修改. 你知道为什么会输出好了么?因为你用关联了,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行而已. :) 谢谢!
按照你的意思是是不是printRow12改为printRow1就好了吗?
但是这样改提示的错误信息还是一样的啊.
能不能按照上面给的脚本帮我修改下. 谢谢!
lrd_ora8_fetch(OraStm1, -1, 15, &uliFetchedRows, PrintRow12, 2, 0, 0);
中的PrintRow12改成了0就好了.
但是不太明白为什么要这样. 我也遇到同样的问题,按照两位搂主的方法试过了,但是好以下错误,我都弄了好几天了~在线等啊,急死我了:(
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}"));
回复 10# 的帖子
继续问题~为什么我手工写的代码就不可以。
我把从oracale自带的sqlplus录制的脚本按照搂主的参数修改了一下就可以了呢?
感觉录制的脚本里,oracle就自己生成了类似于"OraDef1",“PrintRow0”的参数。
那位高手指点N下阿。
还有为什么在我的脚本里lr_output_message和lr_ora8_print都不起作用呢,都没有运行呢??? 请问:如果SELECT返回为空的话,怎么处理。直接去调用{ROW}会报错。
[ 本帖最后由 tanky 于 2009-4-22 16:19 编辑 ] 自问自答:
if (uliFetchedRows==0){
lr_output_message ("返回空!");
return 0;//退出
}; 巨牛!
页:
[1]