dbms_random在Oracle 10.2.0.4下的bug
Test Case:+++++++++++++++++++++++++++++++++CREATE TABLE TestCode(ID VARCHAR2(5),VAL NUMBER(1));select * from (select rownum id, decode(sign(dbms_random.value-0.9),-1,...
[转]Trees in SQL: Nested Sets and Materialized Path
From:http://www.dbazine.com/oracle/or-articles/tropashko4————————————————————————————————————by Vadim TropashkoRelational databases are universally conceived of...
一句SQL实现输出九九乘法表
一句SQL实现输出九九乘法表[@more@]
[算法]求元音字母在单词中第一次出现的位置.
求元音字母['a', 'e', 'i', 'o', 'u']在单词中第一次出现的位置. 没有时,为'0',如:you(= 2), by (= 0), translate (= 3), i (= 1), Other (= 1)等, 要求用SQL实现!测试用例:create table test (word varchar2(30));insert into test values('A');insert into test values('quick');insert into test values('brown');insert into test values('fox');insert into test values('jumps');insert into test values('over');insert into test values('the');insert into test values('laze');insert into test values('dog');insert into test
取连续数中的第一个
数据按日期排正序,若有连续的col2,则取最小日期及col2显示否则,显示日期和col2 表数据为: 2000/01/02 A2000/04/01 A2003/01/01 B2004/02/03 B2005/02/02 C2006/01/01 ASQL语句的结果为:2000/01/02 A2003/01/01 B2005/02/02 C2006/01/01 A[@more@]【Solved By sonic】SQL> SELECT * FROM ZTEST;A B--------------- ----------2000-1-2 A2000-4-1 A2003-1-1 B2004-2-3 B2005-2-2 C2006-1-1 A6 rows selectedSQL> SELECT A, B2 FROM (SELECT T.*,3 LAG(T.A) OVER(ORDER BY T.A) PA,4 LAG(T.B) OVER(ORDER BY T.A) PB5 FROM ZTEST T)
Simulate a loop in SQL【By hmxxyy】
SQL> select * from x;C1 C2---------- ----------11111 122222 233333 344444 4[@more@]SQL> create table y (c1 number);Table created.SQL> insert into y2 select a.c1 from x a,3 (4 select rownum rn from (select max(c2) maxlevel from x) a connect by 1=1 and level <=5 maxlevel) b6 where a.c2 >= rn7 order by c18 /10 rows created.SQL> select * from y;C1----------11111222222222233333333333333344444444444444444444http://blog.itpub.net/post/4791/27191 偶的方法:SQL> create table loopx(c1
构造N个连续的数
今日学到一招,构造N个连续的数,不必从all_objects等视图中取,因为我们不知道N的具体大小,如果N超过了select count(*) from all_objects,那就得使用其他方式来实现了,一个巧妙的方法是这样的:SQL> select * from (select rownum from dual connect by rownum<&N);输入 n 的值: 6原值 1: select * from (select rownum from dual connect by rownum<&N)新值 1: select * from (select rownum from dual connect by rownum<6) ROWNUM---------- 1 2 3 4 5这个
取得列名组合成的字符串
开发中常常会用到一个表的字段组成的字符串,通常是用逗号分隔的一个列表,例如C_DM, C_MC, N_YXX以前都是desc 表,然后将列名复制粘贴到Word里,然后用查找替换的方式将回车替换成“,”或者其他分隔符来做到,现在用sql来得到select str from ( select str, rank()over(order by length(str) desc) rk from ( select sys_connect_by_path(column_name,'&Prefix') str from ( select s.*, rank()over(order by column_id desc) rn from user_tab_cols s where s.table_name=upper('&x') ) connect by rn = prior rn-1) ) wher
[转载]Oracle数据库字符集问题解析3
继续问题解答[@more@]ygzeng:收获很大,在测试过程中,增加了一些新的case,在测试过程中,发现“替代字符”往往容易转换成“靠”,“?”,“?”,“驴”,对这些乱码的产生原因有些不解!1,数据库字符集设为gb2312,客户端设为WE8ISO8859P1,然后插入数据,读取数据SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1sqlplus system/manager@gb2312select * from nls_database_parameters where PARAMETER='NLS_CHARACTERSET'; PARAMETER VALUE--------------------------------- ---------------------------------NLS_CHARACTERSET ZHS16CG
查询出N分钟内同一主叫拨打同一被叫次数超过M次的用户
有一张电话通话记录的表,字段有:id,主叫号码caller,被叫号码callee,开始时间begintime,结束时间endtime。请问如何查询出N分钟内同一主叫拨打同一被叫次数超过M次的这些用户??http://www.itpub.net/450873.html[@more@]By LastWinnerselect caller,callee from(select caller,callee,begintime-lag(begintime)over(partition by caller, callee order by begintime) call_interval from tab) where call_interval begin 0 and 3/1440如果是要超过M次的,M>=2,那么select caller,callee from(select caller,callee,begintime-lag(beg
[转载]REF CURSOR 小结
原文地址: http://www.itpub.net/443352.html 原文发表者:zhyuhREF CURSOR 小结 利用REF CURSOR,可以在程序间传递结果集(一个程序里打开游标变量,在另外的程序里处理数据)。也可以利用REF CURSOR实现BULK SQL,提高SQL性能。REF CURSOR分两种,Strong REF CURSOR 和 Weak REF CURSOR。Strong REF CURSOR:指定retrun type,CURSOR变量的类型必须和return type一致。DECLARETYPE strongcurtyp IS REF CURSOR RETURN emp%ROWTYPE;emp_cv strongcurtyp;Weak REF CURSOR:不指定return type,能和任何类型的CURSOR变量匹配。DECLARETYPE wea
[转载]Oracle数据库字符集问题解析2
实验结果分析五quote: SQL> INSERT INTO TEST VALUES('东北');1 row created.SQL> EXIT更改客户端字符集为ZHS16GBKD:>SET NLS_LANG=AMERICAN_AMERICA.ZHS16GBKD:>SQLPLUS "/ AS SYSDBA"无法显示用US7ASCII插入的字符集,但可以显示用ZHS16GBK插入的字符集SQL> SELECT * FROM TEST;R1--------------------东北??东北6+11SQL>疑问3:US7ASCII为ZHS16GBK的子集,为何在US7ASCII环境下插入的数据无法显示? [/B] [@more@]在客户端字符集设置为US7ASCII时,向字符集为ZHS16GBK的数据库中插入“东北”,需要进行字符
[转载]Oracle数据库字符集问题解析1
原文地址:http://www.itpub.net/276524.html作者:jeffli73经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下。第一次迭代:掌握字符集方面的基本概念。 有些朋友可能会认为这是多此一举,但实际上正是由于对相关基本概念把握不清,才导致了诸多问题和疑问。首先是字符集的概念。我们知道,电子计算机最初是用来进行科学计算的(所以叫做“计算机”),但随着技术的发展,还需要计算机进行其它方面的应用处理。这就要求计算机不仅能处理数值,还能处理诸如文字、特殊符号等其它信息,而计算机本身能直接处理的只有数值
显示每个班分数前的15%名的同学名单
create table a (class varchar2(8),student varchar2(100),score number(3))class 代表班,应该有一班,二班,三班...student学生score分数有多个班,每个班有多名同学现在想查询并显示每个班分数前的15%名的同学名单,请问该如何写查询语句[@more@]select class,student,score from(select class,student,score,rank()over(partition by class order by score desc)/count(*)over(partition by class) ratiofrom a)where ratio<=0.15
在校学生的入学年份
以8月为界,例如2005年8月1日,之前的在校学生入学年份为2001~2004,之后的为2002~2005[@more@]select to_char(add_months(sysdate,4),'yyyy')-rownum from all_objects where rownum<5;
产生一个32位的16进制随机数
1、SELECT SYS_GUID() FROM DUAL;2、select replace(s,'/','') s from (select s,rank()over(order by length(s) desc) rk from(select (sys_connect_by_path(a,'/')) s from (select decode(floor(dbms_random.value*16),0,'0',1,'1',2,'2',3,'3', 4,'4',5,'5',6,'6',7,'7',8,'8',9,'9', 10,'A',11,'B',12,'C',13,'D',14,'E',15,'F') a,rownum rn from all_objectswhere rownum<=32) connect by rn-1=prior rn) )where rk=1[@more@]
http://www.itpub.net/105327.html
http://www.itpub.net/105327.html[@more@]待整理
sqlplus的小秘密4『By oldwain』
这个也许不算什么秘密, 很多人大概都知道, 不过用过的人也许不多.在8.1.7版本(也许是816? 不太确定)以后, sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.[@more@]scott@O9I.US.ORACLE.COM> set markup html on spool on">scott@O9I.US.ORACLE.COM> select empno, ename from emp where rownum<3;<br><p><table border='1' width='90%' align='center' summary='Script output'><tr><th scope="col">EMPNO</th><th scope="col&
sqlplus的小秘密3『By oldwain』
有没有过这样的经历? 在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.[@more@]比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:scott@O9I.US.ORACLE.COM> select deptno, 2 empno, 3 ename 4 from emp 5 where这时, 你发现你想不起来工资的列名是什么了.这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入 scott@O9I.US.ORA
sqlplus的小秘密2『By oldwain』
Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:[@more@]select deptno, empno, ename from emp where empno = '7788';如果拷贝到sql*plus中执行, 就会出现错误:scott@O9I.US.ORACLE.COM> select deptno, empno, ename 2 from emp 3 scott@O9I.US.ORACLE.COM> where empno = '7788'; SP2-0734: unknown command beginning "where empn..." - rest of line ignored. scott@O9I.US.ORACLE.COM> 原因是sqlplus遇到空行就认为是语句结束了.其实要改