技术开发 频道

45个非常有用的Oracle查询语句分享

  实用/数学 相关的查询

  把数值转换成文字

  更多信息可以查看: Converting number into words in Oracle

  1 SELECT TO_CHAR (TO_DATE (1526, 'j'), 'jsp') FROM DUAL;

  输出:

  1 one thousand five hundred twenty-six

  在包的源代码中查询字符串

  这个查询语句会在所有包的源代码上搜索‘FOO_SOMETHING’ ,可以帮助用户在源代码中查找特定的存储过程或者是函数调用。

  1 --search a string foo_something in package source code
  2 SELECT *
  3 FROM dba_source
  4 WHERE UPPER (text) LIKE '%FOO_SOMETHING%'
  5 AND owner = 'USER_NAME';

  把用逗号分隔的数据插入的表中

  当 你想把用逗号分隔开的字符串插入表中的时候,你可以使用其他的查询语句,比如 IN 或者是 NOT IN 。这里我们把‘AA,BB,CC,DD,EE,FF’转换成包含 AA,BB,CC 等作为一行的表,这样你就很容易把这些字符串插入到其他表中,并快速的做一些相关的操作。

  1 WITH csv
  2 AS (SELECT 'AA,BB,CC,DD,EE,FF'
  3 AS csvdata
  4 FROM DUAL)
  5 SELECT REGEXP_SUBSTR (csv.csvdata, '[^,]+', 1, LEVEL) pivot_char
  6 FROM DUAL, csv
  7 CONNECT BY REGEXP_SUBSTR (csv.csvdata,'[^,
      +', 1, LEVEL) IS NOT NULL;

  查询表中的最后一个记录

  这个查询语句很直接,表中没有主键,或者是用户不确定记录最大主键是否是最新的那个记录时,就可以使用这个语句来查询表中最后一个记录。

  01 SELECT *
  02 FROM employees
  03 WHERE ROWID IN (SELECT MAX (ROWID) FROM employees);
  04
  05 (OR)
  06
  07 SELECT * FROM employees
  08 MINUS
  09 SELECT *
  10 FROM employees
  11 WHERE ROWNUM < (SELECT COUNT (*) FROM employees);

  在 Oracle 中做行数据乘法

  这个查询语句使用一些复杂的数学函数来做每个行的数值乘法。更多内容请查阅: Row Data Multiplication In Oracle

  01 WITH tbl
  02 AS (SELECT -2 num FROM DUAL
  03 UNION
  04 SELECT -3 num FROM DUAL
  05 UNION
  06 SELECT -4 num FROM DUAL),
  07 sign_val
  08 AS (SELECT CASE MOD (COUNT (*), 2) WHEN 0 THEN 1 ELSE -1 END val
  09 FROM tbl
  10 WHERE num < 0)
  11 SELECT EXP (SUM (LN (ABS (num)))) * val
  12 FROM tbl, sign_val
  13 GROUP BY val;

  在 Oracle 生成随机数据

  每个开发者都想能轻松生成一堆随机数据来测试数据库多好,下面这条查询语句就可以满足你,它可以在 Oracle 中生成随机的数据插入到表中。详细信息可以查看 Random Data in Oracle

  01 SELECT LEVEL empl_id,
  02 MOD (ROWNUM, 50000) dept_id,
  03 TRUNC (DBMS_RANDOM.VALUE (1000, 500000), 2) salary,
  04 DECODE (ROUND (DBMS_RANDOM.VALUE (1, 2)), 1, 'M', 2, 'F') gender,
  05 TO_DATE (
  06 ROUND (DBMS_RANDOM.VALUE (1, 28))
  07 || '-'
  08 || ROUND (DBMS_RANDOM.VALUE (1, 12))
  09 || '-'
  10 || ROUND (DBMS_RANDOM.VALUE (1900, 2010)),
  11 'DD-MM-YYYY')
  12 dob,
  13 DBMS_RANDOM.STRING ('x', DBMS_RANDOM.VALUE (20, 50)) address
  14 FROM DUAL
  15 CONNECT BY LEVEL < 10000;

  在 Oracle 中生成随机数值

  这是 Oracle 普通的旧的随机数值生成器。这个可以生成 0-100 之间的随机数值,如果你想自己设置数值范围,那么改变乘数就可以了。

  1 --generate random number between 0 and 100
  2 SELECT ROUND (DBMS_RANDOM.VALUE () * 100) + 
      1 AS random_num FROM DUAL;

  检查表中是否含有任何的数据

  这个可以有很多中写法,你可以使用 count(*) 来查看表里的行的数量,但是这个查询语句比较高效和快速,而且我们只是想知道表里是否有任何的数据。

  1 SELECT 1  
  2 FROM TABLE_NAME  
  3 WHERE ROWNUM = 1;

  更多精彩尽在2014年4月10日-12日在北京五洲皇冠国际酒店举办的第五届中国数据库技术大会,2月29日之前订票可享受7.8折最低票价。

Facebook专家:Hadoop不足以处理大数据
进入官网了解更多详情

4
相关文章