ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » Oracle开发 » 动态查询求教

标题: 动态查询求教
离线 sunchao
大道至简



来自 西安
精华贴数 0
个人空间 0
技术积分 4252 (327)
社区积分 104 (3369)
注册日期 2003-3-8
论坛徽章:5
会员2006贡献徽章授权会员生肖徽章2007版:鼠生肖徽章2007版:鸡数据库板块每日发贴之星 
      

发表于 2008-6-29 19:23 
CREATE OR REPLACE PROCEDURE test(
   v_tblname varchar2,
   v_begin_time varchar2,
   v_end_time varchar2
)
IS
   v_sql VARCHAR2(5000);
BEGIN
   v_sql := 'select decode(row_number() over(partition by aNumber order by aNumber),1, aNumber, null) aNumber,
a,ERROR,count(*) num,b,c
from '||  v_tblname || '                                                 --tblname--》v_tblname
where Error=0
and COMMITTIME>='|| v_begin_time || 'and COMMITTIME<'|| v_end_time || '   
group by aNumber,a,b,c,ERROR';
   EXECUTE IMMEDIATE v_sql;
END;



应该是这样的吧


__________________
oracle 8 i/9i/10g   unixware/solaris/aix/linux
QQ:273891948
MSN:chaosun2002@126.com      
http://blog.itpub.net/sunchao
http://tahiti.oracle.com
只看该作者    顶部
离线 阿日
2M-Never give up


精华贴数 0
个人空间 495
技术积分 1633 (1033)
社区积分 1123 (887)
注册日期 2004-1-4
论坛徽章:20
ITPUB元老铁扇公主红孩儿2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:马术2008北京奥运纪念徽章:棒球
数据库板块每日发贴之星2008北京奥运纪念徽章:皮划艇激流回旋ERP板块每日发贴之星每日论坛发贴之星行业板块每日发贴之星2008年新春纪念徽章

发表于 2008-6-29 19:26 
用dbms_output的把sql输出来看看,然后在sqlplus下执行是否可以
v_sql VARCHAR2(5000)  这个最长是4000吧,记不太清了:(

[ 本帖最后由 阿日 于 2008-6-29 19:28 编辑 ]


__________________
我欲将心向明月,奈何明月照沟渠.
过去的都过去了,大不了从头再来,别回头,向前看!
http://blog.csdn.net/zxf_feng
只看该作者    顶部
离线 lctweb
初级会员



精华贴数 0
个人空间 0
技术积分 32 (37926)
社区积分 0 (99503)
注册日期 2003-11-5
论坛徽章:0
      
      

发表于 2008-6-29 21:14 
按11楼的方式是对的,但如何查看执行结果?

SQL> exec test('tdtable_26','1214409600','1214495999')

PL/SQL procedure successfully completed.

SQL>


只看该作者    顶部
离线 taochenpfj
梦想中的版主


精华贴数 0
个人空间 0
技术积分 191 (9802)
社区积分 0 (932977)
注册日期 2006-5-16
论坛徽章:0
      
      

发表于 2008-6-29 23:01 
冒昧的说一句啊,你这样写的话是不是容易被别人注入呢??


只看该作者    顶部
离线 taochenpfj
梦想中的版主


精华贴数 0
个人空间 0
技术积分 191 (9802)
社区积分 0 (932977)
注册日期 2006-5-16
论坛徽章:0
      
      

发表于 2008-6-29 23:03 
我实现过一个传入多个变量,可以查询多个列的存储过程,但是都被否定了,就是怕有sql注入


只看该作者    顶部
离线 lctweb
初级会员



精华贴数 0
个人空间 0
技术积分 32 (37926)
社区积分 0 (99503)
注册日期 2003-11-5
论坛徽章:0
      
      

发表于 2008-6-30 08:46 
执行后没有结果,是否是被别的程序注入呢??如果采用该存储过程无法实现,有没有别的方法可以实现?

SQL> CREATE OR REPLACE PROCEDURE test(
  2     v_tblname varchar2,
  3     v_begin_time varchar2,
  4     v_end_time varchar2
  5  )
  6  IS
  7  --variables declare
  8  TYPE rct_cursor IS REF CURSOR ;
  9  c rct_cursor ;
10  v_sql VARCHAR2(4000);
11  aNUMBER NUMBER(10);
12  a NUMBER(10);
13  ERROR NUMBER(5);
14  num NUMBER(5);
15  b NUMBER(5);
16  c NUMBER(5);
17  BEGIN
18  ---打印汇总
19  -- set column header
20     v_sql := 'select decode(row_number() over(partition by aNumber order by aNumber),1, aNumber, null) aNumber,
21  a,ERROR,count(*) num,b,c
22  from '||  v_tblname || '                                                
23  where ErrorCode=0
24  and COMMITTIME>='|| v_begin_time || 'and COMMITTIME<'|| v_end_time || '   
25  group by aNumber,a,b,c,ERROR';
26  dbms_output.put_line(v_sql);
27  open c for v_sql;
28  loop
29      fetch c into aNUMBER,a,ERROR,num,b,c;
30      exit when c%notfound;
31      dbms_output.put_line(aNUMBER||',  '||a||',  '||ERROR||',  '||num||',  '||b||',  '||c);
32  end loop;
33  END;
34  /

Procedure created.

SQL>  exce test('tdtable_26','1214409600','1214495999');
SP2-0734: unknown command beginning "exce test(..." - rest of line ignored.
SQL>
SQL>
SQL> execute test('tdtable_26','1214409600','1214495999');

PL/SQL procedure successfully completed.

SQL>


只看该作者    顶部
离线 wuhuaT
勿忘我


来自 勿问我
精华贴数 0
个人空间 0
技术积分 1847 (882)
社区积分 479 (1442)
注册日期 2008-1-14
论坛徽章:9
2008北京奥运纪念徽章:田径2008北京奥运纪念徽章:羽毛球数据库板块每日发贴之星ERP板块每日发贴之星生肖徽章2007版:鸡生肖徽章2007版:蛇
生肖徽章2007版:牛生肖徽章2007版:兔    

发表于 2008-6-30 09:25 
学习


__________________
活到老,学到老,玩到老,乐到老
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问