目前日期文章:200809 (16)

瀏覽方式: 標題列表 簡短摘要

description='111,222,333,444,555,666,777,888,999,101'

select

nvl(substr(description, 1,instr(description, ',', 1, 1)-1),'無') one,

nvl(substr(description, instr(description, ',', 1, 1)+1, instr(description, ',', 1, 2) - instr(description, ',', 1, 1)-1),'無') two,

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 三種JOIN語法的差異

敘述

用途說明

oracleD2K 發表在 痞客邦 留言(1) 人氣()

 http://www.searchfull.net/blog/2006/11/18/1163822247129.html
http://blog.roodo.com/emisjerry/archives/cat_3885.html

一、TABLE 結構表
fphm,kshm

oracleD2K 發表在 痞客邦 留言(1) 人氣()

 在SQL語句優化過程中,我們經常會用到hint,現總結一下在SQL優化過程中常見Oracle HINT的用法:

1. /*+ALL_ROWS*/
表明對語句塊選擇基於開銷的優化方法,並獲得最佳吞吐量,使資源消耗最小化.
例如:

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 基本的Sql編寫注意事項

  • 盡量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
  • 不用NOT IN操作符,可以用NOT EXISTS或者外連接+替代。
  • Oracle在執行IN子查詢時,首先執行子查詢,將查詢結果放入臨時表再執行主查詢。而EXIST則是首先檢查主查詢,然后運行子查詢直到找到第一個匹配項。NOT EXISTS比NOT IN效率稍高。但具體在選擇IN或EXIST操作時,要根據主子表資料量大小來具體考慮。
  • 不用“<>”或者“!=”操作符。對不等於操作符的處理會造成全表掃瞄,可以用“<” or “>”代替。
  • Where子句中出現IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執行全表掃瞄。可以考慮在設計表時,對索引列設置為NOT NULL。這樣就可以用其他操作來取代判斷NULL的操作。
  • 當通配符“%”或者“_”作為查詢字符串的第一個字符時,索引不會被使用。
  • 對於有連接的列“||”,最后一個連接列索引會無效。盡量避免連接,可以分開連接或者使用不作用在列上的函數替代。
  • 如果索引不是基於函數的,那麼當在Where子句中對索引列使用函數時,索引不再起作用。
  • Where子句中避免在索引列上使用計算,否則將導致索引失效而進行全表掃瞄。
  • 對資料類型不同的列進行比較時,會使索引失效。
  • 用“>=”替代“>”。
  • UNION操作符會對結果進行篩選,消除重復,資料量大的情況下可能會引起磁盤排序。如果不需要刪除重復記錄,應該使用UNION ALL。
  • Oracle從下到上處理Where子句中多個查詢條件,所以表連接語句應寫在其他Where條件前,可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾。
  • Oracle從右到左處理From子句中的表名,所以在From子句中包含多個表的情況下,將記錄最少的表放在最后。(只在採用RBO優化時有效,下文詳述)
  • Order By語句中的非索引列會降低性能,可以通過添加索引的方式處理。嚴格控制在Order By語句中使用表達式。
  • 不同區域出現的相同的Sql語句,要保證查詢字符完全相同,以利用SGA共享池,防止相同的Sql語句被多次分析。
  • 多利用內部函數提高Sql效率。
  • 當在Sql語句中連接多個表時,使用表的別名,並將之作為每列的前置碼。這樣可以減少解析時間。

需要注意的是,隨著Oracle的昇級,查詢優化器會自動對Sql語句進行優化,某些限制可能在新版本的Oracle下不再是問題。尤其是採用CBO(Cost-Based Optimization,基於代價的優化方式)時。

我們可以總結一下可能引起全表掃瞄的操作:

  • 在索引列上使用NOT或者“<>”;
  • 對索引列使用函數或者計算;
  • NOT IN操作;
  • 通配符位於查詢字符串的第一個字符;
  • IS NULL或者IS NOT NULL;
  • 多列索引,但它的第一個列並沒有被Where子句引用;

Oracle優化器

oracleD2K 發表在 痞客邦 留言(2) 人氣()

 在server run 修改D2K程式的步驟 :

1.先將檔案上傳至ORACLE SERVER上
  例 : /oracle/testmgr1/cherpdv1appl/au/11.5.0/forms/US
   ps: 必須是fmb的檔案

2.在開始WINDOWS→執行→輸入CMD→畫面將打開DOS

oracleD2K 發表在 痞客邦 留言(0) 人氣()

1.透過PL-SQL直接叫系統已設的LOV用法 :
 DECLARE
a_value_chosen BOOLEAN;
BEGIN
go_block('sis_registration');

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 select to_char(timestamp, 'DD-MON-YY HH24:MI:SS'),
message_text,
module,
log_sequence
 from fnd_log_messages

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 在 ERP 標準 custom.pll 文件中,填寫下麵類似代碼:
FUNCTION zoom_available RETURN BOOLEAN IS
form_name  varchar2 ( 30 ) := name_in( 'system.current_form' );
 block_name varchar2 ( 30 ) := name_in( 'system.cursor_block' );
BEGIN

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 ORACLE的幾個常見小問題的詳細解答
 
第一部分、SQL&PL/SQL
 [Q]怎麼樣查詢特殊字符,如通配符%與_
 [A]select * from table where name like 'A\_%' escape '\'

oracleD2K 發表在 痞客邦 留言(0) 人氣()

   oracle SQL裡常用的時間函數,經典推薦
相信很多人都有過統計某些數據的經歷,比如,要統計財務的情況,可能要按每年,每季度,每月,甚至每個星期來分別統計。 那在oracle中應該怎麼來寫sql語句呢,這個時候Oracle的日期函數會給我們很多幫助。

常用日期型函數
1。  Sysdate當前日期和時間
 SQL> Select sysdate from dual;

oracleD2K 發表在 痞客邦 留言(5) 人氣()

 Delete from emp e

  where e.rowid >

   (select min(f.rowid) from emp f

oracleD2K 發表在 痞客邦 留言(0) 人氣()

 -------------------------------------------------- -------------
 1.一進頁面就能看到表中已生成數據,而不用按ctrl+f11進行查詢的語句:
在form級的觸發器when-new-form-instance中,
寫如下代碼:
go_block('XXXX');

oracleD2K 發表在 痞客邦 留言(1) 人氣()

 --獲取系統記錄行數
go_block('T_WARITEMPRT');
last_record;
 row_count:=:system.trigger_record; --system.cursor_record
--execute_trigger('POST-CHANGE');

oracleD2K 發表在 痞客邦 留言(0) 人氣()

1.取料號.單位及版本

  SELECT msi.inventory_item_id, msi.primary_uom_code,MAX(mir.revision) max_revision
           INTO v_inv_id, v_item_unit,v_revision
           FROM mtl_system_items_b msi,mtl_item_revisions_b mir

oracleD2K 發表在 痞客邦 留言(0) 人氣()

1.取,之前的文字,如果是.就把,換掉
SELECT SUBSTR('abc,123,TYT', 1 ,INSTR('abc,123,TYT', ',', 1, 1)-1)
FROM dual;

ANS : abc

oracleD2K 發表在 痞客邦 留言(0) 人氣()