⑴ oracle sql語句的寫法 一張表student,2個欄位,年級grade和學號stuID
create or replace function get_IDlist(f_grade in varchar2)
return varchar2
is
v_pre varchar2(20) default null;
v_list varchar(4000) default null;
v_templist varchar(4000) default null;
v_templist1 varchar(4000) default null;
begin
for x in ( select to_number(t.stuid) stuid,t.gradeid from ljtest t where t.gradeid =f_grade order by to_number(t.stuid)) loop
if v_pre is null then
v_list:=to_char(x.stuID);
else
if x.stuID-v_pre=1 then
--判斷三個以上連續的
--select (length('aaa-bb-ccc') - length(replace('aaa-bb-ccc', '-'))) / length('aaa-bb-ccc') from al;
select substr(v_list,instr(v_list,',','-1')+1,length(v_list)) into v_templist from al;
select substr(v_list,1,instr(v_list,',','-1')) into v_templist1 from al;
if(instr(v_templist,'-')>0) then
v_list:=v_templist1||substr(v_templist,1,instr(v_templist,'-'))||'-'||to_char(x.stuID);
else
v_list:=v_templist1||v_templist||'-'||to_char(x.stuID);
end if;
else
v_list:=v_list||','||to_char(x.stuID);
end if;
end if;
v_pre:= x.stuID;
end loop;
return v_list;
end;
⑵ oracle 數據查詢sql語句。
e name: tab
SELECT field1, field2, field3... fieldn
FROM (SELECT field1, field2, field3...fieldn, ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK ) FROM tab ) t
WHERE rk = 1
00904是說列名不正確,仔細看了下,AS RK後面多了一個括弧,下面這樣就可以了
SELECT field1, field2, field3... fieldn
FROM (SELECT field1, field2, field3...fieldn,
ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK
FROM tab
where field1=表名.欄位名) t
WHERE rk = 1
我給你改一下吧,你寫的那個效率很低的
SELECT t1.a, t1.b, t2.field1, t2.field2, t2.field3...t2.fieldn
FROM lkk t1,
(SELECT field1, field2, field3...fieldn,
ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK
FROM tab) t
WHERE t.field1 = t1.a
AND t.rk = 1
⑶ 在Oracle使用sql語句中如何插入日期格式的數據
1、輸入伺服器地址、資料庫登錄用戶名、登錄密碼,完成資料庫登錄操作。
⑷ oracle SQL語句問題
最好按照後面的格式寫
'yyyy-mm-dd HH24:MI:SS'
yyyy-mm-dd就不說了
關鍵是HH24代表的是24小時制,所以就不要什麼上午,下午了
09:42:16 直接就是21:42:16
所以正確的語法應該是
select to_date('2011-05-03 21:42:16','yyyy-mm-dd HH24:MI:SS ') from al;
⑸ Oracle資料庫sql語句
DML操作(insert , delete , update)之後,一定要使用commit或rollback命令來結束該事務,否則直接關閉SQL Plus,資料庫默認rollback之前未提交的事務,所以今天你在select的時候 會顯示未選定行。
而手動輸入commit,rollback 這類的命令,是顯示的提交事務(完成事務)。
如果在DML操作之後未及時顯示的提交,而是又進行了DDL操作(create alter...),則資料庫會隱式的提交之前未完成的事務。
所以 下次一定要注意哦~~
⑹ Oracle的SQL語句中如何處理『&』符號
如下sql語句就不能正確運行:sql>
select
'a&b'
from
al;處理方法:用oracle的字元串處理函數chr處理。chr(38)表示
&符號如:select
chr(38)
from
al;結果:&sql>
select
'a'||chr(38)||'b'
from
al;結果:a&b其他不能處理的特殊符合,也用類似的方式處理。如果不知道該特殊符號的值,可以調用ascii函數處理如:select
ascii('&')
from
al;結果:38
⑺ oracle怎麼設置
1,登錄後默認自動選中My Objects
默認情況下,PLSQL Developer登錄後,Brower里會選擇All objects,如果你登錄的用戶是dba,要展開tables目錄,正常情況都需要Wait幾秒鍾,而選擇My Objects後響應速率則是以毫秒計算的。
Tools菜單 --> Object Brower Filters,會打開Brower Folders的定單窗口,把「My Objects」設為默認即可。
Tools菜單--> Object Brower Folders,中把你經常點的幾個目錄(比如:Tables Views Seq Functions Proceres)移得靠上一點,並加上顏色區分,這樣你的平均尋表時間會大大縮短,試試看。
/*設置方法:Tools菜單--Brower Folders,會打開Brower Folders的定單窗口,把「My Objects」移到最頂端即可。
同理,可以把你經常點的幾個目錄(比如:tables Views Seq Functions Proceres)移得靠上一點,並加上顏色區分,這樣你的平均尋表時間會大大縮短,試試看。*/
2,記住密碼
這是個有爭議的功能,因為記住密碼會給帶來數據安全的問題。
但假如是開發用的庫,密碼甚至可以和用戶名相同,每次輸入密碼實在沒什麼意義,可以考慮讓PLSQL Developer記住密碼。
位置:Tools菜單--Preferences--Oracle--Logon HIstory--Store with password
3,雙擊即顯示表數據
PLSQL Developer里滑鼠雙擊表或者視圖時的默認響應實在讓我感到失望,因為我最關心的是表結構和數據,但是雙擊後這兩件事情都沒有發生,也許默認響應是高手們需要的,但對我來說查看數據和表結構是最主要的,其他的我不關心。
不過好的是這是可以設置的,你可以給滑鼠雙擊和拖放綁定需要的事件,比如:雙擊編輯數據,拖放顯示表結構,Yeah!
位置:Preferences--User Interface,在右側,為不同的Object type綁定雙擊和拖放操作。
4,SQL語句字元全部大寫
自認為這是個好習慣,信息系統的核心是資料庫,系統出問題時最先要查的就是SQL語句,怎樣在浩瀚的日誌中快速找到那條SQL語句是件比較痛苦的事情。
SQL語句全部大寫並不能徹底解決這一問題,但在一堆代碼中間找一行全部大寫的字元相對容易些,你的眼睛會感謝你。
設置位置在Editor里。同時我覺得等寬字元可以減少程序的出錯率,所以我所有的工具清一色用Courier New,如果某個IDE不支持這個字體,我基本上會選擇放棄。哈,偶系個滿挑惕的傢伙。
5,特殊Copy
在SQL Window里寫好的SQL語句通常需要放到Java或者別的語言內,就需要轉成字元串並上加上相應的連字元,這一個事不需要再重復做了,在寫好的SQL上點右鍵,使用特殊Copy即OK!
6,自定義快捷鍵
PLSQL Developer里預留了很多鍵讓用戶自定義,這是件很Hight的事情。不像霸道的Word,基本上所有的鍵都已預定義了功能,修改起來很是頭疼。
通常情況下,打開PLSQL Developer後,最經常乾的事就是打開SQL Window和Command Window,就給這兩個操作定義了快捷鍵,ALT+S和ALT+ C,這樣拿滑鼠點三下的事情只需要按一下鍵。
7,其他
快速清空表,TRUNCATE TABLE,右鍵里可以找到。
沒搞清楚的兩個功能:Analyze、VALID
7、SQL Window中根據游標位置自動選擇語句
設置方法:Preferences --> Window Types --> SQL Window,將AutoSelect statement選中即可。注意,每條語句後面要加分號。
補充:
8、啟動PLSQL Developer,window list菜單自動調出
需要兩步設置,首先要保存桌面設置,然後勾上Window list選項,具體操作如下:
a、在菜單項的Tools下的Preference選項中的User Interface中選擇Option,在右邊對於的Autosave desktop中把前面的復選框勾選上。
b、在菜單項的Tools下的Window list選項勾上。
9、格式化SQL(format)
當大家拿到一段較長的SQL語句時,想快速查看其中的邏輯,可以放在這個工具里,進行格式化,語句的邏輯也就一目瞭然了
10、資料庫自動檢測連接情況
因為資料庫每過一段時間不操作,就會自動斷開,然後需要自己手動連接,因為網路原因,總會卡在那裡。工具提供了檢測連接的功能,可以自動連接。
具體設置在Tools-Preferences-Check connection,Check connection前面勾選即可。
⑻ oracle SQL語句,日期格式轉換
TO_DATE格式(以時間:2007-11-02 13:45:25為例)
1、日期和字元轉換函數用法(to_date,to_char)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from al; //日期轉化為字元串
select to_char(sysdate,'yyyy') as nowYear from al; //獲取時間的年
select to_char(sysdate,'mm') as nowMonth from al; //獲取時間的月
select to_char(sysdate,'dd') as nowDay from al; //獲取時間的日
select to_char(sysdate,'hh24') as nowHour from al; //獲取時間的時
select to_char(sysdate,'mi') as nowMinute from al; //獲取時間的分
select to_char(sysdate,'ss') as nowSecond from al; //獲取時間的秒
2、字元串和時間互轉
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from al
select to_char( to_date(222,'J'),'Jsp') from al //顯示Two Hundred Twenty-Two
(8)oraclesql語句格式化擴展閱讀
date 轉換為字元串:
to_char(日期,」轉換格式」 ) 即把給定的日期按照「轉換格式」轉換。
轉換的格式:
表示year的:y 表示年的最後一位 yy 表示年的最後2位 yyy 表示年的最後3位 yyyy 用4位數表示年。
表示month的:mm 用2位數字表示月;mon 用簡寫形式 比如11月或者nov ;month 用全稱 比如11月或者november。
表示day的:dd 表示當月第幾天;ddd表示當年第幾天;dy 當周第幾天 簡寫 比如星期五或者fri;day當周第幾天全寫。比如星期五或者friday。
表示hour的:hh 2位數表示小時 12進制; hh24 2位數表示小時 24小時。
表示minute的:mi 2位數表示分鍾。
表示second的:ss 2位數表示秒60進制。
⑼ 尋覓高手寫Oracle SQL語句
這個一定能行:
select
name,
sum(case when state=1 then 1 else 0 end) "1",
sum(case when state=2 then 1 else 0 end) "2"
from 表名
group by name;
********************
補充:我寫成這樣只是為了方便看(這個符合程序開發的原則),如果非得弄成一行:
select name,sum(case when state=1 then 1 else 0 end) "1",sum(case when state=2 then 1 else 0 end) "2" from 表名 group by name;
實施log:
[TEST@ORA1] SQL>select * from test1;
N STATE
- ----------
A 1
A 1
A 2
B 1
B 2
B 2
6 rows selected.
[TEST@ORA1] SQL>select
2 name,
3 sum(case when state=1 then 1 else 0 end) "1",
4 sum(case when state=2 then 1 else 0 end) "2"
5 from test1
6 group by name;
NAME 1 2
---- ---------- ----------
A 2 1
B 1 2
********************
---
以上,希望對你有所幫助。