Oracle时间日期操作
sysdate+(5/24/60/60) 在系统时间基础上延迟5秒sysdate+5/24/60 在系统时间基础上延迟5分钟sysdate+5/24 在系统时间基础上延迟5小时sysdate+5 在系统时间基础上延迟5天add_months(sysdate,-5) 在系统时间基础上延迟5月add_months(sysdate,-5*12) 在系统时间基础上延迟5年上月末的日期:select last_day(add_months(sysdate, -1)) from dual;本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual本周星期一的日期:select trunc(sysdate,'day')+1 from dual年初至今的天数:select ceil(sysdate - trunc(sysd
查找bad sql
一些查找bad sql的方法: column sql_text format a80;-- 值得怀疑的SQL 来自http://www.ixora.com.au/select substr(to_char(s.pct, '99.00'), 2) || '%' load, s.executions executes, p.sql_textfrom ( select address, disk_reads, executions, pct, rank() over (order by disk_reads desc) ranking from ( select address, disk_reads, executions, 100 * ratio_to_report(disk_reads) over () pct from sys.v_$sql where command_type != 47 ) where dis
oracle日期函数(5)
查出任一年月所含的工作日CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2) RETURN INTEGER IS/*------------------------------------------------------------------------------------------函数名称:Get_WorkingDays中文名称:求某一年月中共有多少工作日作者姓名: XINGPING编写时间: 2004-05-22输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405返 回 值:整型值,包含的工作日数目。算法描述: 1).列举出参数给出的年月中的每一天。这里使用了一个表(ljrq是我的库中的一张表。这个表可以是有权访问的
删除重复行
create table students(id number(15,0),area varchar2(10),stu_type varchar2(2),score number(20,2));create index idx_students on students(id);insert into students values(1, '111', 'g', 80 );insert into students values(1, '111', 'j', 80 );insert into students values(1, '222', 'g', 89 );insert into students values(1, '222', 'g', 68 );insert into students values(2, '111', 'g', 80 );insert into students values(2, '111', 'j', 70 );insert into students values(2, '222', 'g', 60 );insert into students valu
oracle日期函数(4)
在Oracle中实现时间相加处理-- 名称:Add_Times-- 功能:返回d1与NewTime相加以后的结果,实现时间的相加-- 说明:对于NewTime中的日期不予考虑-- 日期:2004-12-07-- 版本:1.0-- 作者:Kevincreate or replace function Add_Times(d1 in date,NewTime in date) return date is hh number; mm number; ss number; hours number; dResult date; begin -- 下面依次取出时、分、秒 select to_number(to_char(NewTime,'HH24')) into hh from dual; select to_number(to_char(NewTime,'MI')) into mm from dual; select to_n
oracle日期函数(3)
常用日期数据格式(该段为摘抄)Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年 SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年 Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度① MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月 RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月 Month 用9个字符长度表示的月份名 Select to_char(
oracle日期函数(2)
1。Sysdate 当前日期和时间SQL> Select sysdate from dual;SYSDATE----------21-6月 -052。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual;LAST_DAY(S----------30-6月 -053。Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months)SQL> Select add_months(sysdate,2) from dual;ADD_MONTHS----------21-8月 -054。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))f
oracle日期函数(1)
trunc(sysdate,'Q') --本季度第一天trunc(sysdate,'D') --本周的第一天(周日)查询Oracle日期格式 ----------------------------------select * from nls_database_parameters; 得到结果如下表: 表中NLS_DATE_FORMAT表示日期格式.PARAMETER VALUE ----------------------------------- ----------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET ZHS16GBK NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUA
shared_pool_spare_free.sql
select avg(v.value) shared_pool_size,greatest(avg(s.ksmsslen) - sum(p.ksmchsiz), 0) spare_free,to_char(100 * greatest(avg(s.ksmsslen) - sum(p.ksmchsiz), 0) / avg(v.value),'99999') || '%' wastagefrom sys.x$ksmss s, sys.x$ksmsp p,sys.v$parameter vwhere s.inst_id = userenv('Instance') andp.inst_id = userenv('Instance') andp.ksmchcom = 'free memory' ands.ksmssnam = 'free memory' andv.name = 'shared_pool_size';[@more@]
监控数据库性能的SQL汇总
监控数据库性能的SQL汇总 1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" from v$session_Wait group by event order by 4; 2. 回滚段的争用情况 select name, waits, gets, waits/gets "Ratio" from v$rollstat a, v$rollname b where a.usn = b.usn; 3. 监控表空间的 I/O 比例 select df.tablespace_name name,df.file_name "file",f.phyrds pyr, f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw from v
oracle转义字符
SQL> select * from test;ID------------------------------------------------------------c_zhangzhangsanccccccSQL> select id from test where id like 'c_%' escape '';ID------------------------------------------------------------c_zhangSQL> select id from test where id like 'c=_%' escape '=';ID------------------------------------------------------------c_zhangSQL> select id from test where id like 'c/_%' escape '/';ID------------------------------------------------------------c_zhang[@mor
oracle10g recyclebin
QL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ -------------------TEST1 BIN$SGHtLJ/KTUOrTO8HY+8x8g==$0 TABLE 2006-10-27:17:34:00SQL> purge recyclebin2 ;回收站已清空。SQL> show recyclebinSQL> show parameter recyclebinNAME TYPE VALUE------------------------------------ ----------- ------------------------------recyclebin string onSQL> alter system set recyclebin=off scope=both;系统已更改。[@more@]
How to get ORACLE_HOME from data dictionary
SQL> set autopri onSQL> var oracle_home varchar2(255)SQL> exec dbms_system.get_env('ORACLE_HOME',:ORACLE_HOME)PL/SQL procedure successfully completed.ORACLE_HOME--------------------------------------------------------------------------------/app/oracle/oracle/product/10.2.0/db_2[@more@]
关联update问题
CREATE TABLE TEST1(ID VARCHAR2(20) NOT NULL PRIMARY KEY,MC VARCHAR2(60));CREATE TABLE TEST2(ID VARCHAR2(20) NOT NULL PRIMARY KEY,MC VARCHAR2(60));INSERT INTO TEST1 VALUES('1','1-11111');INSERT INTO TEST1 VALUES('2','1-22222');INSERT INTO TEST1 VALUES('3','1-33333');INSERT INTO TEST2 VALUES('1','2-11111');INSERT INTO TEST2 VALUES('2','2-22222');UPDATE (SELECT A.MC MCA,B.MC MCB FROM TEST1 A,TEST2 B WHERE A.ID=B.ID) SET MCA=MCB;/*2 rows updated这个写法要求TEST2表要有主建,否则SQL无法执行!ORA-01779
查看表中复合数据类型内容
对于ARRAY字段类型的数据操作 CREATE TYPE ARRAY_LINK AS ARRAY(100) OF NUMBER(15,0);/CREATE TABLE TEST (ID NUMBER(10), LINKS ARRAY_LINK);/INSERT INTO TEST(ID,LINKS) VALUES(1,ARRAY_LINK(11,111));/INSERT INTO TEST(ID,LINKS) VALUES(2,ARRAY_LINK(22,222,2222));/COMMIT;不知道要怎么SELECT才能得到如下结果:ID LINK_MEMBER1 111 1112 222 2222 2222解答:CREATE or replace TYPE ARRAY_LINK AS ARRAY(100) OF NUMBER(15,0);/CREATE TABLE TEST3 (ID NUMBER(10), LINKS ARRAY_LINK);INSERT INTO TEST3(ID,LINKS) VALUES(1,ARRA
在Oracle中实现各种日期处理(2)
9. select months_between(to_date('01-31-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 1 select months_between(to_date('02-01-1999','MM-DD-YYYY'), to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL; 1.03225806451613 10. Next_day的用法 Next_day(date, day) Monday-Sunday, for format code DAY Mon-Sun, for format code DY 1-7, for format code D
oracle分页
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。分页查询格式:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。选择第21 到4
在Oracle中实现各种日期处理(1)
TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小时格式下时间范围为: 0:00:00 - 23:59:59.... 12小时格式下时间范围为: 1:00:00 -
oracle聚集函数排序
对于按照自定义聚集函数连接起来的字符串中的数据不能自动按照一定的规则进行组合,解决办法是:在类型体中对数据进行排序处理。下边是修改后的代码CREATE OR REPLACE TYPE VcArrayType IS TABLE OF VARCHAR2(4000);/CREATE OR REPLACE TYPE STR_CONN_TYPE AS OBJECT(--vStr VARCHAR2(4000),vStr VcArrayType,STATIC FUNCTIONODCIAggregateInitialize(sctx IN OUT STR_CONN_TYPE )RETURN NUMBER,MEMBER FUNCTIONODCIAggregateIterate(SELF IN OUT STR_CONN_TYPE ,VALUE IN NUMBER )RETURN NUMBER,MEMBER FUNCTIONODCIAggregateMerge(SELF
利用oracle存储过程执行操作系统命令
以下方法在WINNT,LINUX下的oracle9i上测试通过,java过程调用系统命令 首先给使用java存储过程的用户授予一定的权限 <>表示所有文件,也可以单独指定文件。 r w e d表示四种操作 Code: Dbms_Java.Grant_Permission('HR', 'java.io.FilePermission', '<<ALL FILE>>', 'read ,write, execute, delete'); Dbms_Java.Grant_Permission('HR', 'java.io.FilePermission', 'd:aa.bat', 'read ,write, execute, delete'); dbms_java.grant_permission ('HR