本站用于记录日常工作内容,虚拟化云计算,系统运维,数据库DBA,网络与安全。
1,创建新表gps-sq ,保存查询出来表名的rownum 值。#:  create table gps_sq as select *              from (select rownum sq , tname                      from tab                     where tname like 'GPS_HT_%'                     order by tname)2,新建存储过程。create or replace procedure p_del_gps_ht(a in number,b in number) is  t_sql varchar2(2000);begin  for c in (select tname              from gps_sq             where sq >= a         &nb...
select * into target_table from source_table;insert into target_table(column1,column2) select column1,5 from source_table;  以上两句都是将源表source_table的记录插入到目标表target_table,但两句又有区别。第一句(select into from)要求目标表target_table不存在,因为在插入时会自动创建。第二句(insert into selectfrom)要求目标表target_table存在,由于目标表已经存在,所以我们除了插入源表source_table的字段外,还可以插入常量,如例中的:5。 例如:需要将user_city表中的部分字段值拷贝到dim_pub_county_act表中(字段名不同),则语句如下:INSERTINTO   SUI1.DIM_PUB_COUNTY_ACT    (       CITY_ID,       COUNTY_ID,       BEGIN_TIME,       END_TIME,       COUNTY_NAME,       ACTIVE_FLAG,   ...
 
0
rownum和rowid都是伪列,但是两者的根本是不同的,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同,但是rowid是物理结构上的,在每条记录insert到数据库中时,都会有一个唯一的物理记录 ,例如  AAAMgzAAEAAAAAgAAB 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30这里的AAAMgzAAEAAAAAgAAB物理位置对应了这条记录,这个记录是不会随着sql的改变而改变。因此,这就导致了他们的使用场景不同了,通常在sql分页时或是查找某一范围内的记录时,我们会使用rownum。1、rownum例如:查找2到10范围内的记录(这里包括2和10的记录)select *  from (select rownum rn, a.* from emp a) twhere t.rn between 2 and 10;查找前三名的记录select * from emp a where rownum < 3;这里我们要注意,直接用rownum查找的范围必须要包含1;因为rownum是从1开始记录的,当然你可以把rownum查出来后放在一个虚表中作为这个虚表的字段再根据条件查询。例如:select *  from (select rownum rn, a.* from emp a) twhere t.rn > 2;这就可以了2、rowid我们在处理一张表中重复记录时经常用到他,当然你也可以用一个很原始...
 
0

Oracle定时执行计划任务

发表者:admin分类:数据库2015-08-03 14:07:11 阅读[1911]
Oracle定时执行计划任务 在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表、每天从数据库中提取符合条件的数据、每天将客户关系管理系统中的数据分配给员工做数据库营销……因此我们就想:能不能让系统来自动定时执行计划任务?下面介绍的是在Oracle数据库中如何实现定时执行计划任务。Oracle在10g版本以前,计划任务用的是DBMS_JOB包,10g版本引入DBMS_SCHEDULER来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB提供了更强大的功能和更灵活的机制/管理,但DBMS_JOB包的使用相对比较简单,也基本能够满足定时执行计划任务的需求,故接下来就先看看DBMS_JOB包的使用方法。我们可以在命令窗口输入showparameter job_queue_processes查看数据库中定时任务的最多并发数,一般设置为10(设置方法:altersystem set job_queue_processes=10),如果设为0,那么数据库定时作业是不会运行的。接下来我们尝试实现以下功能:每隔一分钟自动向job_test表中插入当前的系统时间。1、创测试表create tablejob_test(updatetime date);2、创建JOBvariablev_job_no number;begindbms_job.submit(:v_job_no, 'insert into job_testvalues(sysdate);', sysdate, 'sysd...
oracle表名HT_100到HT_200 ,要删除表中一部分数据。create or replace procedure p_delete ist_sql varchar2(2000);begin  for c in (select tname from tab where tname like 'HT_%') loop      t_sql:='delete from  '||c.tname||' where to_char(location_time,''yyyymmdd'')<''20150301''';      execute immediate t_sql;      commit;dbms_output.put_line(c.tname||'删除完成');  end loop;end;这个是一个存储过程,执行这个过程前:先运sql>set serverout on;不会显dbms_output.put_line输出信息。sql>exec p_delete;每次可以自定义 删除 多少数据表中的数据。create or replace procedure p_del_gps_ht(a in number,b in number) is  t_sql varchar2(2000);begin  for c in (select tname              from (sel...
 
0

批量删除Oracle数据

发表者:admin分类:数据库2015-08-01 15:43:51 阅读[2011]
批量删除Oracle数据在使用delete语句删除数据时,数据库是要做日志记录的,以便将来可以恢复数据,可是我在删除上百万条数据时,十分缓慢甚至死机,请问有没有什么好方法?鉴于QQ群中不断的有人被这方面的问题困惑,故转贴如下:专家意见:几个办法:  1. 如果删除的数据是大部分,建议使用楼上的方法把要保留的数据放在一个临时表里,truncatetable后再放回来  2. 也可以分段提交,楼上也提到了  3. 专门使用一个大回滚段  4. 如果确认将来不需要做恢复,改为非归档模式,删除完改回来再做个备份.源:http://searchdatabase.techtarget.com.cn/感谢:tech target IT专家网网友观点一: create or replace procedure delete_tableisi number(10);beginfor x in (select * from emp where DEPTNO like 'a%')loopdelete emp where emp.id = x.idi:=i+1;if i>1000 thencommit;i:=0;end if;end loop;exceptionwhen others thendbms_out.put_line(sqlcode);rollback;end delete_table;   网友观点二: 这个是我平常用来批量删除数据,每500条数据提交一次。DECLARECNT NUMBER(10):=0;I NUMBER(10);BEGINSELECT COUNT(*) INTO CNT FROM ep_arrearage_bak WHERETO...
 
0
在使用delete语句删除数据时,数据库是要做日志记录的,以便将来可以恢复数据,可是我在删除上百万条数据时,十分缓慢甚至死机,请问有没有什么好方法?这个是我平常用来批量删除数据,每500条数据提交一次。DECLARECNT NUMBER(10):=0;I NUMBER(10);BEGINSELECT COUNT(*) INTO CNT FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,'MM')='01';FOR I IN 1..TRUNC(CNT/500)+1 LOOPDELETE FROM ep_arrearage_bak WHERE TO_CHAR(DF_DATE,'MM')='01' AND ROWNUM<=500;COMMIT;END LOOP;END;
 
0

Oracle ADD_MONTHS 使用

发表者:admin分类:数据库2015-08-01 10:21:17 阅读[2032]
需要脚本,自动清空分区数据。表是按月分区,希望每月自动执行一次,清空下个月的分区数据。 分区后缀是两位数月份,不足前面补0。 SQL> select lpad(extract(month from(add_months(to_date('2012-12-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 1))), 2, '0') aa from dual; AA--01 SQL> select lpad(extract(month from(add_months(to_date('2012-11-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 1))), 2, '0') aa from dual; AA--12 SQL> 标准文档:ADD_MONTHS SyntaxDescription of the illustration add_months.gifPurposeADD_MONTHS returns the date date plusinteger months. The date argument can be a datetime value or any value that can be implicitly converted toDATE. The integer argument can be an integer or any value that can be implicitly converted to an integer. The return type is alwaysDATE, regardless of the datatype of date. Ifdate is the last day of the month or if the resulting month has fewer days than the day component ofdate, then the result is the last day of the resulting m...
Oracle dbLink跨数据库查询并插入数据 工作中需要从一个数据库中的表GIS_WEICHAI_DATA_1S中的数据导入到另个一数据库的表GIS_WEICHAI_DATA_1S中,数据库服务器都是远程的<IP分别为: 221.131.228.256     211.161.192.46>!我的实现方法是在本地使用PL/SQL操作两个远程服务器,实现方式如下:1.               为你需要操作的远程数据库服务器建立本地服务名:      在本地数据库安装文件中,找到$ORACLE_HOME/network/admin/tnsnames.ora文件,    末尾添加    --第一个远程服务器的服务名:MYORACLE1MYORACLE1 =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = 221.131.228.256)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = orcl)    )  )   --第一个远程服务器的服务名:MYORA...
输出到文件文件首先编辑一个脚本文件,比如命名为abc.sh   spool abc.txt;                      #将结果输出为abc.txtselect * from wap_subscribe where Telcomcompanyid = '20200' and (Orderdate like '2005%' or Disorderdate like '2005%');spool off;  在sql>模式下使用@/opt/abc.sh即可,查询结果即输出到abc.txt了。输出到Excel文件SQL> set termout offSQL> set heading offSQL> set pagesize 0SQL> set verify offSQL> set echo offSQL> spool /tmp/aaa.csvSQL> select id || ',' || name || ',' from test;   #多字个段分列存放在表格中1,,2,,3,6,,7,SQL> spool off补充一下:在将查结果保存到文件的时候,可能不希望将结果输出到屏幕,这样会影响速度。那么就可以能通过脚本的方式来解决。在命令行下面实现不了,所以写在脚本中,招行一下就可以了。创建文件more email.sql set term offspool user.txt@get_email.sqlspool offexitmore get_email.sql select email from album.wdxc_user;sqlplus uesr/pa...
    总共51页,当前第31页 | 页数:
  1. 21
  2. 22
  3. 23
  4. 24
  5. 25
  6. 26
  7. 27
  8. 28
  9. 29
  10. 30
  11. 31
  12. 32
  13. 33
  14. 34
  15. 35
  16. 36
  17. 37
  18. 38
  19. 39
  20. 40
  21. 41