ITPUB??ì3
ITPUB论坛 » Oracle开发 » 动态查询求教

标题: 动态查询求教
离线 lctweb
初级会员



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

发表于 2008-6-29 01:30 
动态查询求教

现在希望写一个过程,实现动态查询,需要动态输入的数据有三个变量:
tblname 表名
begin_time 开始时间
end_time 结束时间


实际查询语句:
select decode(row_number() over(partition by aNumber order by aNumber),1, aNumber, null) aNumber,
a,ERROR,count(*) num,b,c
from  tblname
where Error=0
and COMMITTIME>=begin_time and COMMITTIME<end_time
group by aNumber,a,b,c,ERROR;


现就dbms_sql该如何用,请指教大家,谢谢!


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



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

发表于 2008-6-29 02:04 
我参考网上信息.试写成以下方式,请指教大家,谢谢!

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 '||  tblname || '
where Error=0
and COMMITTIME>='|| begin_time || 'and COMMITTIME<'|| end_time || '
group by aNumber,a,b,c,ERROR';
   EXECUTE IMMEDIATE v_sql;
END;


只看该作者    顶部
离线 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4758 (275)
社区积分 32620 (25)
注册日期 2007-9-10
论坛徽章:25
金色在线徽章每日论坛发贴之星生肖徽章:猪   
      

发表于 2008-6-29 09:49 
这样有问题吗?


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
离线 lctweb
初级会员



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

发表于 2008-6-29 13:08 
执行时报错:
SQL> execute   dbms_output.test('test_26','1214409600','1214495999');
BEGIN dbms_output.test('test_26','1214409600','1214495999'); END;

                  *
ERROR at line 1:
ORA-06550: line 1, column 19:
PLS-00302: component 'test' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


只看该作者    顶部
离线 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4758 (275)
社区积分 32620 (25)
注册日期 2007-9-10
论坛徽章:25
金色在线徽章每日论坛发贴之星生肖徽章:猪   
      

发表于 2008-6-29 13:16 
执行存储过程是这样的,大哥
exec test('test_26','1214409600','1214495999')


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
离线 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4758 (275)
社区积分 32620 (25)
注册日期 2007-9-10
论坛徽章:25
金色在线徽章每日论坛发贴之星生肖徽章:猪   
      

发表于 2008-6-29 13:17 
dbms_output 是个包啊


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
离线 zhanghong
abcd


精华贴数 0
个人空间 0
技术积分 422 (4537)
社区积分 3 (20020)
注册日期 2004-9-10
论坛徽章:1
设计板块每日发贴之星     
      

发表于 2008-6-29 13:42 
hha


__________________
Come on my Blog
[fly]数据库技术QQ群:37383097[/fly]

----------------------------------------------------------------------
      真心诚意,以情感人;推心置腹,以诚待人;
  开诚布公,以理服人;言行一致,以信取人;

  令行禁止,依法治人;设身处地,以宽容人;
  扬人责己,以功归人;论功行赏,以奖励人。
只看该作者    顶部
离线 lctweb
初级会员



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

发表于 2008-6-29 14:06 
我试过都不行
SQL> exce test('test_26','1214409600','1214495999')
SP2-0734: unknown command beginning "exce test..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
SQL>
SQL>
SQL>
SQL> execute  test('test_26','1214409600','1214495999')
BEGIN test('test_26','1214409600','1214495999'); END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00905: object test is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


只看该作者    顶部
离线 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 4758 (275)
社区积分 32620 (25)
注册日期 2007-9-10
论坛徽章:25
金色在线徽章每日论坛发贴之星生肖徽章:猪   
      

发表于 2008-6-29 14:54 
test这个过程创建了没有?
那你在前面吧用户名加上去


__________________
马无夜草不肥,人无外财不富。
只看该作者    顶部
离线 lctweb
初级会员



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

发表于 2008-6-29 16:45 
test 过程已经建立
accept proc_name char prompt 'dmp_object_name:'
accept file_name char prompt 'dmp_file_name:'
set pagesize 10000
set verify off
set termout off
set feedback off
col dummy_col new_value max_len noprint
select max(length(text))dummy_col from dba_source
where upper(name)=upper('&proc_name');
set linesize &max_len
spool &file_name
select name||'('||type||')' "infos about" from dba_source
where upper(name) = upper('&proc_name') and rownum<2;
select text "sql-code" from dba_source
where upper(name)=upper('&proc_name');
spool off
set verify on
set termout on
set feedback on

SQL> @exp_plsql.sql  //TEST存储过程源代码提取
dmp_object_name:test
dmp_file_name:test

more test.lst
infos about                                                                                                   
--------------------------------------------                                                                  
TEST(PROCEDURE)                                                                                

sql-code                                                                                                      
---------------------------------------------------------------------------------------------------------------
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 '||  tblname || '                                                                                         
where Error=0                                                                                                  
and COMMITTIME>='|| begin_time || 'and COMMITTIME<'|| end_time || '                                            
group by aNumber,a,b,c,ERROR';                                                                                 
   EXECUTE IMMEDIATE v_sql;                                                                                    
END;


只看该作者    顶部
相关内容


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