1、oracle分頁
1)select * from (select a.*, rownum rn from (select * from tabel order by XX) a where rownum<5) where rn>2;
注:在oracle中用rownum來記錄數據的順序,這個語句的意思是,按某個字段排序並查找出表中所有數據,根據數據的順
序,先找出數據排序號小於5的數據,然後再找到大於2的數據。
2)select * from emp where rowid in (select rid from (select rownum rn,rid from (select rowid rid from table order by XX) a
where rownum<=5) where rn>=2)
注:這裏是根據rowid來查找數據,由於這個語句子查詢查找的字段很少,故有人認爲他的速度比較快。但這裏有一個小問
題,就是當這個語 句和上面的語句按相同列排序,兩條sql查出的數據並不相同,具體什麼原因我也不清楚,請知道的
大神告知一下。
2、delete和truncate的區別
delete是DML(數據操作語言),該操作會放在rollback segement中,提交了事物才生效,如果用相應的trigger,執行時將
會被 觸發。truncate是DDL(數據定義語言),該操作執行時立即生效,原數據並沒放在rollback segement中,沒有回滾一說,
也不 觸發trigger。
注:當批量刪除數據時,建議用truncate,速度較快,但也存在一定的安全隱患
3、oracel表解鎖
1)找到被鎖定表的session
SELECT object_name, machine, s.sid, s.serial#
FROM gv$locked_object l, dba_objects o, gv$session s
WHERE l.object_id= o.object_id
AND l.session_id = s.sid;
2)釋放session,進行解鎖
ALTER system kill session 'XX, XXXXX';
4、表空間
1)作用:控制數據庫所佔的磁盤空間;分類管理,提供效率;備份和恢復數據
2)創建表空間
create tablespace 表空間名 datafile ‘D:\xxx.dbf’ size 20m;
注:xxx.dbf爲數據文件名,size最大值爲500m
3)擴大表空間
a、添加數據文件:alert tablespace 表空間名 add datafile ‘D:\xxx2.dbf’ size 20m;
b、增加數據文件大小:alert tablespace 表空間名 ‘D:\xxx .dbf’ resize 20m;
注:當你不知道對應的數據文件在哪個位置,可通過一下SQL查詢出對應的位置:
select f.* from dba_data_files f where f.tablespace_name='表空間名'
c、設置文件自動增長:alert tablespace 表空間名 ‘D:\xxx.dbf’autoextend on next 10m maxsize 500m;
4)改變表空間狀態
聯機:alert tablespace 表空間名 online
脫機:alert tablespace 表空間名 offline
只讀:alert tablespace 表空間名 read only
讀寫:alert tablespace 表空間名 read write
5)移動表空間數據文件
a、確定數據文件的表空間: select tablespace_name from dba_data_files where file_name=’d:\XXX.dbf’;
b、使表空間脫機: alert tablespace 表空間名 offline
c、移動數據文件到制定位置:host move ‘d:\xxx.dbf’ ‘c:\xxx.dbf’
d、邏輯修改數據文件:alert tablespace 表空間名 rename datafile ‘d:\xxx.dbf’ to ‘c:\xxx.dbf’
e、使表空間聯機:alert tablespace 表空間名 online
5、查找某個字段在數據庫中的哪些表出現
where ut.table_name=uc.TABLE_NAME
and column_name =upper('BOX_NO') ;
6、數據庫字符串分割
1)定義返回類型
CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (4000);
2)實現分割方法
CREATE OR REPLACE FUNCTION split (
p_str IN VARCHAR2,
p_delimiter IN VARCHAR2 default(','))
RETURN split_type
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
my_split split_type := split_type ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0 THEN
j := len;
str := SUBSTR (p_str, i);
my_split.EXTEND;
my_split (my_split.COUNT) := str;
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
my_split.EXTEND;
my_split (my_split.COUNT) := str;
END IF;
END LOOP;
RETURN my_split;
END split;
3)循環獲取分割內容
for m in ( select * from table(split(strLabelLNoList,'|')) ) loop
.......
end loop;