A. Oracle創建索引sql簡單的例子,在表中的指定欄位和如何使用索引呢
創建索引:create index emp_id1(索引名) on emp(empno,ename,deptno) ;
在創建索引時需要制定所在的表的列名,即你要在哪個或者哪些列上創建索引!
使用索引:索引一般是在查詢時由資料庫優化器自動進行判斷是否使用,就是說就算你在某個列上創建了索引,當你在查詢這個表時資料庫也不一定會使用索引,因為有時候需要查詢的范圍比較大,如全表查詢,這時資料庫優化器會去判斷使用索引和不使用索引哪個效率高,當然是不使用索引效率高啦!所以說一般查詢時是不要指定索引的,不過索引還是得創建的!
雖說查詢時不推薦指定索引,但還是可以指定的:SELECT * FROM stuMarks (INDEX=IX_writtenExam) WHERE writtenExam BETWEEN 60 AND 9
B. oracle中視圖可以創建索引嗎
oracle中視圖可以創建索引,創建索引方法為:
1、打開Navicat。
C. oracle如何在表指定欄位上創建索引的sql簡單例子 和如何使用索引
create
index
index_name
on
table_name(column_name)
;
只要你查詢使用到建了索引的欄位,一般都會用到索引。
--創建表
create
table
aaa
(
a
number,
b
number
);
--創建索引
create
index
idx_a
on
aaa
(a);
--使用索引
select
*
from
aaa
where
a=1;
這句查詢就會使用索引
idx_a
D. oracle如何創建全文索引
一、設置詞法分析器
Oracle實現全文檢索,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle稱為term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash值等信息。檢索時,Oracle從這組表中查找相應的term,並計算其出現頻率,根據某個演算法來計算每個文檔的得分(score),即所謂的『匹配率』。而lexer則是該機制的核心,它決定了全文檢索的效率。Oracle針對不同的語言提供了不同的lexer,而我們通常能用到其中的三個:
basic_lexer:針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為『垃圾』處理,如if , is等,具有較高的處理效率。但該lexer應用於漢語則有很多問題,由於它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以『中國人民站起來了』這句話為例,basic_lexer分析的結果只有一個term ,就是『中國人民站起來了』。此時若檢索『中國』,將檢索不到內容。
chinese_vgram_lexer:專門的漢語分析器,支持所有漢字字元集(SUTF8)。該分析器按字為單元來分析漢語句子。『中國人民站起來了』這句話,會被它分析成如下幾個term: 『中』,『中國』,『國人』,『人民』,『民站』,『站起』,起來』,『來了』,『了』。可以看出,這種分析方法,實現演算法很簡單,並且能實現『一網打盡』,但效率則是差強人意。
chinese_lexer:這是一個新的漢語分析器,只支持utf8字元集。上面已經看到,chinese vgram lexer這個分析器由於不認識常用的漢語詞彙,因此分析的單元非常機械,像上面的『民站』,『站起』在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器能認識大部分常用漢語詞彙,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大提高了效率。但是它只支持utf8,如果你的資料庫是zhs16gbk字元集,則只能使用笨笨的那個Chinese vgram lexer.
如果不做任何設置,Oracle預設使用basic_lexer這個分析器。要指定使用哪一個lexer,可以這樣操作:
BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
END;
/
其中my_lexer是分析器名。
二、建立全文索引
在建立intermedia索引時,指明所用的lexer:
CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context parameters('lexer my_lexer');
※個人體會:全文索引建立後,用pl/sql developer工具view table,在index這一欄是看不到索引信息的。
而本人在刪除全文索引時遇到過一下報錯:
SQL> drop index searchkeytbl_key;
drop index searchkeytbl_key
ORA-29868: cannot issue DDL on a domain index marked as LOADING
解決方法:
ORA-29868: cannot issue DDL on a domain index marked as LOADING
說明:在創建索引的時候斷開、重啟等導致索引中斷沒有執行成功,之後再drop或者rebuild等操作的時候都會報此錯誤
解決:只能drop index ind_name force強行刪除,然後再重建
三、索引同步維護
用以下的兩個job來完成(該job要建在和表同一個用戶下) :
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''index_name'');',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END; //同步
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit; //優化
建完後手動運行下:
exec dbms_job.run(jobno);
※個人體會:運行job可能會有問題,此時可以單獨運行索引,嘗試一下
exec ctx_ddl.sync_index('index_name');
如果單獨運行沒有問題,則檢查job是否寫錯或者當前操作的oracle資料庫用戶有無運行存儲過程的許可權
SQL> exec dbms_job.run(190);
begin dbms_job.run(190); end;
ORA-12011: execution of 1 jobs failed
ORA-06512: at "SYS.DBMS_IJOB", line 406
ORA-06512: at "SYS.DBMS_JOB", line 272
ORA-06512: at line 1
以上報錯就是用戶沒有運行任何存儲過程造成的,此時需要對用戶加上這個許可權:
SQL> grant execute any procere to oracle_username;
再看一下job的情況
select * from user_jobs;
四、測試
關聯查詢: select * from table_name where contains (column_name,'keyword') >0;
SQL> select * from searchkeytbl where type='城市' and contains (key,'楊浦') >0;
USERNAME TYPE KEY
-------------------- ---------------------------------------- --------------------------------------------------------------------------------
mujian80 城市 上海市楊浦區
五、問題
加全文索引遇到的問題(不斷更新)
SQL> create index gh_ghname_idx on gh(ghname) indextype is ctxsys.context parameters('lexer gh_ghname_lexer');
create index gh_ghname_idx on gh(ghname) indextype is ctxsys.context parameters('lexer gh_ghname_lexer')
ORA-24795: Illegal COMMIT attempt made
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drvddl.IndexCreate
ORA-20000: Oracle Text error:
DRG-50857: oracle error in drvdml.MaintainKTab
ORA-24795: Illegal COMMIT attempt made
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 364
To avoid the error, please use one of the following solutions
1. Don't use a 32k-blocksized tablespace to store the internal index objects
- or -
2. Download Patch 5596325 from Metalink and apply it as described in the README file.
看一下 可能是用於創建索引的表空間不夠了
reports——>DBA——>total free space pl/sql developer工具,查看錶空間的剩餘空間
select * from v$datafile; 查看數據文件信息
E. 如何在ORACLE資料庫的欄位上建立索引
Oracle中建立索引,會提高查詢速度:
create index 索引名 on 表名(列名);
例如:
create index index_userid on tbl_detail(userid);
F. oracle如何在表指定欄位上創建索引的sql簡單例子
table:
create table ta (fa varchar2(10), fb number);
create index idx_ta_fb on ta(fb);
這是最簡單的,在這個基礎上還可以加其他條件,例如唯一性等。
同時還有其他方法也可以創建索引。
如果你有pl/sql,可以查看一下表的定義,其中有索引的部分。
然後點擊「SQL「就可以看到更多的語句的寫法。
G. 如何合理創建Oracle資料庫索引的3個要求
如何合理創建Oracle資料庫索引的3個要求:
在Oracle資料庫中,創建索引雖然比較簡單。但是要合理的創建索引則比較困難了。筆者認為,在創建索引時要做到三個適當,即在適當的表上、適當的列上創建適當數量的索引。雖然這可以通過一句話來概括優化的索引的基本准則,但是要做到這一點的話,需要資料庫管理員做出很大的努力。具體的來說,要做到這個三個適當有如下幾個要求。
一、 根據表的大小來創建索引。
雖然給表創建索引,可以提高查詢的效率。但是資料庫管理員需要注意的是,索引也需要一定的開銷的。為此並不是說給所有的表都創建索引,那麼就可以提高資料庫的性能。這個認識是錯誤的。恰恰相反,如果不管三七二十一,給所有的表都創建了索引,那麼其反而會給資料庫的性能造成負面的影響。因為此時濫用索引的開銷可能已經遠遠大於由此帶來的性能方面的收益。所以筆者認為,資料庫管理員首先需要做到,為合適的表來建立索引,而不是為所有的表建立索引。
一般來說,不需要為比較小的表創建索引。如在一個ERP系統的資料庫中,department表用來存儲企業部門的信息。一般企業的部分也就十幾個,最多不會超過一百個。這100條記錄對於人來說,可能算是比較多了。但是對於計算機來說,這給他塞塞牙縫都還不夠。所以,對類似的小表沒有必要建立索引。因為即使建立了索引,其性能也不會得到很大的改善。相反索引建立的開銷,如維護成本等等,要比這個要大。也就是說,付出的要比得到的多,顯然違反常理。
另外,就是對於超大的表,也不一定要建立索引。有些表雖然比較大,記錄數量非常的多。但是此時為這個表建立索引並一定的合適。如系統中有一張表,其主要用來保存資料庫中的一些變更信息。往往這些信息只給資料庫管理員使用。此時為這張表建立索引的話,反而不合適。因為這張表很少用到,只有在出問題的時候才需要查看。其次其即使查看,需要查詢的紀錄也不會很多,可能就是最近一周的更新記錄等等。對於對於一些超大的表,建立索引有時候往往不能夠達到預計的效果。而且在打表上建立索引,其索引的開銷要比普通的表大的多。那麼到底是否給大表建立索引呢?筆者認為,主要是看兩個方面的內容。首先是需要關注一下,在這張大表中經常需要查詢的記錄數量。一般來說,如果經常需要查詢的數據不超過10%到15%的話,那就沒有必要為其建立索引的必要。因為此時建立索引的開銷可能要比性能的改善大的多。這個比例只是一個經驗的數據。如果資料庫管理員需要得出一個比較精確的結論,那麼就需要進行測試分析。即資料庫管理員需要測試一下全表掃描的時間,看看其是否比建立索引後的查詢時間要長或者短。如果是長的話,則說明有建立索引的必要。但是如果沒有的話,則說明還是全表掃描速度來的快。此時也就沒有必要建立索引了。
總之,在考慮是否該為表建立索引時,一般來說小表沒有建立索引的必要。而對於打表的話,則需要進行實際情況實際分析。簡單一點的,可以根據大致的比率來確定。如果要精確一點的,則可以進行全表掃描性能分析,以判斷建立索引後是否真的如預期那樣改善了資料庫性能。
二、 根據列的特徵來創建索引。
列的特點不同,索引創建的效果也不同。資料庫管理員需要了解為哪些列創建索引可以起到事倍功半的效果。同時也需要了解為哪些列創建索引反而起到的是事倍功半的效果。這有利於他們了解到底給為怎麼樣的欄位建立索引。
根據筆者的經驗,往往為如下特徵的列創建索引能夠起到比較明顯的效果。如對於一些重復內容比較少的列,特別是對於那些定義了唯一約束的列。在這些列上建立索引,往往可以起到非常不錯的效果。如對於一些null值的列與非Null值的列混合情況下,如果用戶需要經常查詢所有的非Null值記錄的列,則最好為其設置索引。如果經常需要多表連接查詢,在用與連接的列上設置索引可以達到事半功倍的效果。
可見,索引設置的是否恰當,不僅跟資料庫設計架構有關,而且還跟企業的經濟業務相關。為此,對於一些套裝軟體,雖然一開始資料庫管理員已經做了索引的優化工作。但是隨著後來經濟數據的增加,這個索引的效果會越來越打折扣。這主要是因為記錄的表化影響到了索引優化的效果。所以筆者建議各位資料庫管理員,即使採用的是大牌軟體公司的套裝軟體,也需要隔一段時間,如一年,對資料庫的索引進行優化。該去掉的去掉,該調整的調整,以提高資料庫的性能。
如在資料庫中有一張表是用來保存用戶信息的。其中有個欄位身份證號碼,這是一個唯一的欄位。在資料庫設計時,給這個欄位創建了索引。但是當這個資料庫投入使用之後,用戶不怎麼輸入用戶的身份證號碼。而且平時也基本不按這個號碼來進行查詢。當記錄月來月多時,這個身份證號碼上的索引欄位不但不能夠改善資料庫的查詢性能,反而成了雞肋。對於這些有很多NULL值的列,而且不會經常查詢所有的非NULL值記錄的列,資料庫管理員要下決心,即使清除這些列上的索引。
所以說索引的優化與調整是一個動態的過程,並不是說資料庫設計好之後就不需要經過調整。資料庫管理員往往需要根據記錄的變化情況,來進行適當的變更。以提高索引的效果。
三、 在一個表上創建多少索引合適?
雖然說,在表上創建索引的數量沒有限制,但是決不是越多越好。也就是說,在創建索引這項事情上,1+1〉2往往不成立。有時候,創建索引越多,其可能會得到適得其反的效果。那麼在一個表上,到底給創建多少索引合適呢?這個沒有一個明確的標准。而是需要資料庫管理員根據實際的用途以及資料庫中記錄的情況,來進行判斷。
通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。這主要是因為表的更新(如往表中插入一條記錄)速度,反而隨著索引的增加而增加。這主要是因為,在更新記錄的同時需要更新相關的索引信息。為此,到底在表中創建多少索引合適,就需要在這個更新速度與查詢速度之間取得一個均衡點。如對於一些數據倉庫或者決策型資料庫系統,其主要用來進行查詢。相關的記錄往往是在資料庫初始化的時候倒入。此時,設置的索引多一點,可以提高資料庫的查詢性能。同時因為記錄不怎麼更新,所以索引比較多的情況下,也不會影響到更新的速度。即使在起初的時候需要導入大量的數據,此時也可以先將索引禁用掉。等到數據導入完畢後,再啟用索引。可以通過這種方式來減少索引對數據更新的影響。相反,如果那些表中經常需要更新記錄,如一些事務型的應用系統,數據更新操作是家常便飯的事情。此時如果在一張表中建立過多的索引,則會影響到更新的速度。由於更新操作比較頻繁,所以對其的負面影響,要比查詢效率提升要大的多。此時就需要限制索引的數量,只在一些必要的欄位上建立索引。
筆者在平時資料庫優化時,往往會根據這些表的用途來為列設置索引。可以查詢相關的動態視圖,看看對於這張表的操作,是更新操作(包括更新、刪除、插入等等)占的比例大,還是查詢操作占的比例大。當過多的索引已經影響到更新操作的速度時,則資料庫管理員就需要先禁用某些索引,以提高資料庫的性能。
總之,在適當的表、適當的列上建立適當的索引。這一句話包含的意思有很多,以上內容只是一部分內容。俗話說,師傅領進門,修行靠自身。筆者在這里指能夠點到為止。一些具體的索引優化內容還是需要各位讀者在日常工作中去體會與總結
H. oracle怎麼創建表空間和索引表空間
開啟oracle服務,打開plsql工具,使用管理員賬戶登錄。
點左上角的新建SQL窗口。
創建表空間。在sql窗口中輸入create tablespace test datafile 'D:\test.ora' size 1000m;這里的test為表空間名稱,路徑自己來命名。然後點執行按鈕。
執行成功後,繼續創建用戶。輸入create user test identified by test default tablespace test quota 500m on users; 這里第一個test為用戶名,第二個test為密碼,第三個test為表空間名。然後執行。
成功創建用戶後,進行授權。輸入grant all privileges to test; 執行該語句給test用戶授權,此時test用戶就可以登錄了。
6
接下來使用test用戶登錄,就可以建表了。
I. 如何使用pl/sql 給一個oracle資料庫中的表的欄位建索引
create index index_name on table_name(column_name) ;
只要你查詢使用到建了索引的欄位,一般都會用到索引。
--創建表
create table aaa
(
a number,
b number
);
--創建索引
create index idx_a on aaa (a);
--使用索引
select * from aaa where a=1;
這句查詢就會使用索引 idx_a
J. oracle 如何動態創建索引
createorreplaceproceresp_crt_stg_index(p_src_tbl_namevarchar2,p_tgt_tbl_namevarchar2,p_tx_datevarchar2)
is
v_crt_ind_sqlvarchar2(4000):='';
v_drop_ind_sqlvarchar2(4000):='';
v_ind_namevarchar2(100):='';
v_tgt_ind_namevarchar2(100):='';
v_col_listvarchar2(1000):='';
v_col_namevarchar2(100):='';
i_ind_col_cntnumber(2,0):=0;
i_tbl_cntnumber(2,0):=0;
i_ind_cntnumber(2,0):=0;
v_step_novarchar2(3):='';
begin
--step1檢查索引定義是否存在
v_step_no:='1';
selectcount(1)intoi_ind_col_cntfromall_ind_columns
wheretable_name=p_src_tbl_name;
if(i_ind_col_cnt=0)then
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,p_src_tbl_name||'不存在索引定義');
return;
endif;
--step2檢查目標表是否存在
v_step_no:='2';
selectcount(1)intoi_tbl_cntfromtabs
wheretable_name=p_tgt_tbl_name;
if(i_tbl_cnt=0)then
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,p_src_tbl_name||'不存在');
return;
endif;
--step3創建索引
v_step_no:='3';
forcur_indin(selectindex_namefromall_indexeswheretable_name=p_src_tbl_name)loop
v_ind_name:=cur_ind.index_name;
v_col_name:='';
v_col_list:='(';
forcur_ind_colin(selectcolumn_namefromall_ind_columnswhereindex_name=v_ind_nameorderbycolumn_position)loop
v_col_name:=cur_ind_col.column_name;
v_col_list:=v_col_list||v_col_name||',';
endloop;
v_col_list:=v_col_list||')';
v_col_list:=replace(v_col_list,',)',')');
v_tgt_ind_name:=replace(v_ind_name,p_src_tbl_name,p_tgt_tbl_name);
v_tgt_ind_name:=v_tgt_ind_name||substr(p_tx_date,7,21);
selectcount(1)intoi_ind_cntfromall_indexeswhereindex_name=v_tgt_ind_name;
if(i_ind_cnt>0)then
v_drop_ind_sql:='dropindex'||v_tgt_ind_name;
executeimmediatev_drop_ind_sql;
endif;
sp_log('sp_crt_stg_index',v_step_no,'1',p_tx_date,v_tgt_ind_name||'創建開始');
v_crt_ind_sql:='createindex'||v_tgt_ind_name||'on'||p_tgt_tbl_name||v_col_list||'nologging';
if(v_crt_ind_sqlisnotnull)then
executeimmediatev_crt_ind_sql;
endif;
sp_log('sp_crt_stg_index',v_step_no,'1',p_tx_date,v_tgt_ind_name||'創建結束');
endloop;
exception
whenothersthen
sp_log('sp_crt_stg_index',v_step_no,'3',p_tx_date,v_tgt_ind_name||'創建異常:'||SQLERRM);
end;
#########################
---- 日期類型轉換
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS');
----Oracle檢查分區
select count(1)
from ALL_TAB_PARTITIONS
where table_name = p_tgt_tbl_name
and PARTITION_NAME = v_prt_name;
----碼表
Select * From ict_s_dic Where opttype = 'ID_TYPE';
decode 內部欄位拼接
decode(Date_Nextvisit,'','下次跟進時間:['||Date_Nextvisit||']') RMK1,
----拼接欄位,刪除表
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM TABS WHERE TABLE_NAME LIKE 'M_ICT%';
Select * From tabs ;
----交換分區,分區交換後數據是否交換?
'ALTER TABLE '|| p_tgt_tbl_name ||' EXCHANGE PARTITION '||v_prt_name||' WITH TABLE '||p_src_tbl_name;
----查詢某表是否存在
select count(1) from tabs
where table_name = p_src_tbl_name;
----重建索引
ALTER index ind_id_idx rebuild
----創建索引nologging
create index I_ICT_CUST_INFO__0 on ICT_CUST_INFO_20141222 (CUST_NO)
nologging;
----查詢分區內數據
select count(1) from stg_ict_trade_info partition(ICT_PRT_2014005);
Select * From User_Ind_Partitions;
Select * From User_Part_Indexes;
-----查詢索引
select index_name from ALL_INDEXES WHERE TABLE_NAME=p_src_tbl_name;
-----查詢分區
select * from ALL_TAB_PARTITIONS
where table_name = p_tgt_tbl_name and PARTITION_NAME = v_prt_name;
-----查詢表名
select * from tabs where table_name = p_tgt_tbl_name;
-----清空表分區數據
'ALTER TABLE '||p_tgt_tbl_name||' TRUNCATE PARTITION ' || v_prt_name;
-----增加表分區
'ALTER TABLE '||p_tgt_tbl_name||' ADD PARTITION ' || v_prt_name||' VALUES LESS THAN (''' ||v_monthend||''') TABLESPACE ICLIENT_O_DATA01 ';
-----重建索引
'ALTER INDEX '||cur_ind.index_name|| ' REBUILD PARALLEL 128 COMPUTE STATISTICS NOLOGGING';
-----交換分區
'ALTER TABLE '|| p_tgt_tbl_name ||' EXCHANGE PARTITION '||v_prt_name||' WITH TABLE '||p_src_tbl_name||' INCLUDING INDEXES';
-----oralce創建同義詞------------
create or replace public SYNONYM ICT_ORG_BPH for iclientodata.ICT_ORG_BPH;
-----oracle 賦許可權
grant select, insert, update, delete on ICT_ORG_BPH to ICLIENTOOPR; --賦許可權
---------------DBA查看錶空間------------
select a.tablespace_name,
a.bytes / 1024 / 1024 / 1024 "Sum G",
(a.bytes - b.bytes) / 1024 / 1024 / 1024 "used G",
b.bytes / 1024 / 1024 / 1024 "free G",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by ((a.bytes - b.bytes) / a.bytes) desc
-------------------------------------------------------------------------------------
--oracle 生成刪表語句,
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM TABS WHERE TABLE_NAME LIKE 'M_ICT%'
--查詢oracle 中ICT開頭的
SELECT * FROM tabs WHERE TABLE_NAME LIKE 'ICT%'
----oracle 表分析語句
'ANALYZE TABLE ' || v_ana_tbl_name || ' estimate system statistics';
例如:ANALYZE TABLE ICT_SUM_AST_DBT_CUST ESTIMATE SYSTEM STATISTICS;
-----------查看鎖定對象及會話
SELECT OBJECT_NAME,MACHINE,S.SID,S.SERIAL#
FROM GV$LOCKED_OBJECT I,DBA_OBJECTS O,GV$SESSION S
WHERE I.OBJECT_ID=O.OBJECT_ID AND I.SESSION_ID=S.SID;
----------oralce解鎖
ALTER SYSTEM KILL SESSION '280,219';
授權腳本生成方法:
select 'grant select on table dmccrm.'||tbl_name||' to public,ex_sdbods; ' from t_ict_tbl_type where tbl_type in('ALL','GP') and ETL_DIR IN( 'GP->ORACLE','無需同步');
-----------oracle批量生成同義詞
SELECT 'create or replace public synonym '||table_name ||' for iclientodata.'||table_name FROM tabs WHERE table_name like 'ICT_%'
-----------oracle批量生成修改表欄位的長度
select 'ALTER TABLE '||TABLE_NAME||' MODIFY '||COLUMN_NAME||' NUMBER(30,8);' from cols t
where t.DATA_TYPE = 'NUMBER'
AND T.DATA_SCALE >0 AND SUBSTR(TABLE_NAME,-8,8)<>'20140531'
---------oracle 批量創建同義詞
select 'create or replace public synonym '||table_name||' for iclientodata.'||table_name||';' from user_tables WHERE table_name LIKE 'ICT_%' AND table_name NOT LIKE '%20140531';
-----------oracle 交換分區語句
ALTER TABLE ICT_CUST_LEVEL_HIS ADD PARTITION ICT_PRT_20140531 VALUES LESS THAN ('2014-06-01')
--------MERGE使用方法
MERGE INTO ICT_CUST_INFO_ALL a
USING
(
SELECT t.CUST_MNG_UM_NO ,t.CUST_NO
FROM ict_cust_mnger_rel t
WHERE t.CUST_NO IN
('600021562650', '600037441214', '600036874754', '600038507516',
'600020226746', '600038089420', '600041030403', '600038952992',
'600039468303')
)b
ON( a.cust_no= b.cust_no)
WHEN MATCHED THEN
UPDATE SET a.MAX_ASSET_INTRO_NO=b.CUST_MNG_UM_NO;
-------------oracle 樹形查詢,查詢機構編號為『9902』的和其下級子機構
select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY PRIOR ioi.org_id = ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1
-------------oracle 樹形查詢,查詢機構編號為『9902』的和上級機構
select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY ioi.org_id = PRIOR ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1
-------------oracle 樹形查詢,查詢機構編號為『9902』的上級機構
select org_id,org_name,org_level from (
SELECT rownum rn, ioi.org_id , ioi.org_name,ioi.org_level
FROM ict_org_info ioi
START WITH ioi.org_id ='9902'
CONNECT BY ioi.org_id = PRIOR ioi.parent_org_id_b
order by ioi.org_level desc
) where rn=1
----------查看錶名與表空間
Select * From user_tables Where table_name = 'ICT_RMT_APPO';
Select * From User_Tablespaces;
----------查詢SQL 預估時間
SELECT SE.SID,
OPNAME,
TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PCT_WORK,
ELAPSED_SECONDS ELAPSED,
ROUND(ELAPSED_SECONDS * (TOTALWORK - SOFAR) / SOFAR) REMAIN_TIME,
SQL_TEXT
FROM V$SESSION_LONGOPS SL, V$SQLAREA SA, V$SESSION SE
WHERE SL.SQL_HASH_VALUE = SA.HASH_VALUE
AND SL.SID = SE.SID
AND SOFAR != TOTALWORK
ORDER BY START_TIME;
------TYPE opty_cur IS REF CURSOR;
整體的意思是「創建一個類型變數cur,它引用游標」,除了cur外,其餘全是關鍵字。
TYPE cur:定義類型變數 ,is ref cursor:相當於數據類型,不過是引用游標的數據類型。
這種變數通常用於存儲過程和函數返回結果集時使用,
因為PL/SQL不允許存儲過程或函數直接返回結果集,
但可以返回類型變數,於是引用游標的類型變數作為輸出參數或返回值就應運而生了。
----查殺進程
SELECT dob.OBJECT_NAME Table_Name,
lo.LOCKED_MODE,
lo.SESSION_ID,
vss.SERIAL#,
vps.spid,
vss.action Action,
vss.osuser OSUSER,
vss.process AP_PID,
VPS.SPID DB_PID,
'alter system kill session ' || '''' || lo.SESSION_ID || ',' ||
vss.SERIAL# || ''';' kill_command
from v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPS
where lo.OBJECT_ID = dob.OBJECT_ID
and lo.SESSION_ID = vss.SID
AND VSS.paddr = VPS.addr
order by 2, 3, DOB.object_name;