oracle數據庫經常使用SQL語句(11.29更新)

筆者平常工做中經常使用到的sql語句,現總結以下,留做往後查看。

一、按照兩列中的最大值取 ,只取兩列其中的一列

SELECT *  FROM t_doc T  ORDER BY GREATEST(T.Load_Count,T.Read_Count) desc
 
 
 
二、取兩列之和
select  t.*,(nvl(T.Load_Count,0)+nvl(T.Read_Count,0 )) as c FROM t_doc T   order by c desc
 
 
 
三、取兩列字符串鏈接 

select T.Load_Count||T.Read_Count FROM t_doc T 
 
 
 
四、獲取oracle數據庫當前用戶下全部表名和表名的註釋
 
select a.TABLE_NAME,b.COMMENTS 
from user_tables a,user_tab_comments b 
WHERE a.TABLE_NAME=b.TABLE_NAME 
order by TABLE_NAME
 
五、兩列結果合併爲一列輸出(兩列數據類型必須同樣)
 
select a from tb
 
union all
 
select b from tb
 
 
 
六、將一列多行拼接成一行

select wmsys.wm_concat(name) from table_name
//wmsys.wm_concat()拼接字段 以逗號分開
七、 不是 SELECTed 表達式

Oracle 數據庫,執行下面語句出現錯誤「ORA-01791: 不是 SELECTed 表達式」:
select distinct t.name from auth_employee t order by t.auth_employee_id asc
原來:SELECT語句中含有DISTINCT關鍵字或者有運算符時,排序用字段必須與SELECT語句中的字段相對應。
網上搜到解釋以下:
在ORDER BY中指定多個列,結果將先按照子句中的第一列排序,而後第二個,依此類推。
在SELECT中未出現的列名也可用於ORDER BY 子句中,只要TABLE中有就行。
但若是SELECT子句中出現了DISTINCT關鍵字,則只能用出現過的列名,
並且若是SELECT子句中使用了任何運算符,在ORDER BY 子句中必須保持和SELECT子句中表達式徹底一致,不然出現錯誤:「ORA-01791: 不是 SELECTed 表達式」。sql

八、查詢數據庫表的建表時間數據庫

SELECT OBJECT_NAME,    CREATED FROM    USER_OBJECTS WHERE object_type = 'TABLE' ORDER BY    CREATED DESCoracle

九、查詢序列的當前值ui

select ANALYSIS_FIX_SEQ.currval  from dual (注:此sql只能在nextval以後纔可使用)對象

select last_number from User_Sequences where sequence_name='ANALYSIS_FIX_SEQ'排序

十、恢復誤刪除的數據字符串

create table quick as
SELECT * FROM T_LOCATION_ALARM AS  OF TIMESTAMP  to_timestamp('2013-11-29 11:00:00', 'yyyy-mm-dd hh24:mi:ss');io

這樣能夠查詢到這個時間點的數據table

十一、恢復誤刪除的PL/SQL對象ast

SELECT  r.object_name ,r.original_name,r.operation ,r.droptime FROM user_recyclebin  r order by droptime desc;

經過這個sql就能夠查詢到已經刪除的對象。

再經過下面這個sql就能夠查詢到對象的內容,不過須要管理權限

SELECT NAME, TEXT FROM DBA_SOURCE AS OF TIMESTAMP TO_TIMESTAMP('2013-11-29:11:20:15', 'yyyy-mm-dd hh24:mi:ss')

相關文章
相關標籤/搜索