posts - 8, comments - 0, trackbacks - 0, articles - 11

          2012年10月29日

          一程序員家的水管壞了,他打電話叫來(lái)一個(gè)水管工修理。 水管工鼓搗了一個(gè)小時(shí),終于把管子修好了,他遞給程序員一張600元的帳單。 “600元!”程序員憤怒地說(shuō):“我當(dāng)程序員一天都賺不了這么多錢!” “是啊。”水管工平靜地說(shuō),“我當(dāng)程序員的時(shí)候也是。”

          posted @ 2012-10-29 14:04 a_alter 閱讀(558) | 評(píng)論 (0)編輯 收藏

          2012年10月9日

          例  如下
          表  A 
          (1--->n) 表B (B 可能為空)
          (n---->n)表C
          (n---->n)表D

          現(xiàn)在有如下問(wèn)題  在查詢的時(shí)候我們?cè)试Sb為空的A數(shù)據(jù)
          Select * from A,B where A.B_AID = B.AID(+)

          擴(kuò)展查詢  如果進(jìn)行B關(guān)聯(lián)C級(jí)別的條件過(guò)濾
          Select * from A,B, C where A.B_AID = B.AID(+) and B.C_AID = C.AID;  

          這個(gè)時(shí)候C能夠知道B是可以為空的, 這個(gè)時(shí)候的join效果是, 如果在A關(guān)聯(lián)B  B存在的情況下 在使用 C的join 條件進(jìn)行篩選。 這個(gè)時(shí)候B為空的A條件還是可以擺查出來(lái)的。 只不過(guò)數(shù)據(jù)列B為空而已

          再進(jìn)行擴(kuò)展篩選  進(jìn)行C關(guān)聯(lián)D級(jí)別的條篩選
          Select * from A,B,C,D where A.B_AID = B.AID(+) and B.C_AID = C.AID and C.D_AID = D.AID;  

          這樣的D級(jí)別的篩選就會(huì)破壞B級(jí)別的賽選。
          這個(gè)時(shí)候測(cè)試效果就是 D 級(jí)別的join條件 會(huì)破壞 B的left join 效果。

          你可能想到改寫條件如下
          Select * from A,B,C,D where A.B_AID = B.AID(+) and B.C_AID = C.AID and C.D_AID(+) = D.AID;  

          可惜我測(cè)試結(jié)果和full join 的效果是一樣的,不是oracle高手, 誰(shuí)知道的留個(gè)言火鏈接  謝謝

          =======================================================================
          后來(lái)找同學(xué)幫忙  得知他以前也遇到這情況
          改寫為如下條件
          select * from (Select ....,C.D_AID from A,B,C where A.B_AID = B.AID(+) and B.C_AID = C.AID ) E,D where E.D_AID(+) = D.AID
          這樣就不會(huì)破壞B(+) 效果。  

          個(gè)人理解就是 select 的組織數(shù)據(jù)效果。具體不清楚 歡迎發(fā)言。

          =======================================================================
          補(bǔ)充:
          今天我才知道  left join 和 inner join 欄位是否必填還有關(guān)系。

          在這個(gè)問(wèn)題上有個(gè)地方被欺騙了 

          就是在 A Left join B  inner JOIN C 的時(shí)候   如果 B 的 C 字段是必填的話  那么就相當(dāng)于  left join。 如果不是必填的話 你必須手動(dòng)的指示 left join (+)  。
          =====================================================================
          補(bǔ)充 2012/10/19   發(fā)現(xiàn)以上的理解不全面

          A--B(+) 意思指B 端可為空, 如果 對(duì)B -- C 下面的元素進(jìn)行賽選, 在局部看 B 和 C 的關(guān)系是兩段都必須存在的, 但是在A -- B(+) 的前提下 C可以為空的,  所以需要使用 B --- C(+) 來(lái)進(jìn)行關(guān)聯(lián)  這樣的壞處是可能會(huì)加載出 B  (存在)-- C (不存在) 這樣的錯(cuò)誤數(shù)據(jù)。 當(dāng)然如果系統(tǒng)中有對(duì)這種數(shù)據(jù)有確實(shí)保障的時(shí)候可以忽略該問(wèn)題

          如果沒(méi)有確切的保障的話
          可能就需要使用 A --- D(+) 其中D 為  select * from B,C where B = C 這樣的過(guò)濾方式, 但是這樣就增加了復(fù)雜度, 你需要將可能用到的查詢條件和查詢結(jié)果集在D中 select 一一列出來(lái)

          在 Select A.*,R1,R2,R3 from A ,(select B.A_Aid,c1,c2,c3,R1,R2,R3 from B,C where B.C_AID= C.Aid) D where A.Aid = B.A_Aid and c1 = ? and c2 = ? ....

          Sql 復(fù)雜度高了一點(diǎn)。





          posted @ 2012-10-09 10:15 a_alter 閱讀(635) | 評(píng)論 (0)編輯 收藏

          2012年9月12日

          本文用途:因?yàn)闀簳r(shí)沒(méi)有時(shí)間去具體看oracle sql的官方文檔 ,紀(jì)錄oracle的一些特殊寫法。 (不斷更新)
          1. with ...  as ...
          with querya as (select * from TB_Test)
          2  case .. (when .. then) .... (when ..  then) .. else ... end
              SELECT FO_FULFILL_TRX_STRING.SEQUENCE_NO, AC_TYPE_ORDER.CODE, CASE
              WHEN AC_TYPE_ORDER.CODE = 'SO'
              THEN ( SELECT ORDER_NUMBER FROM SO_ORDER WHERE SO_ORDER.AID = FO_FULFILL_TRX_STRING.AID_ORDER_SO )
              ELSE ( SELECT ORDER_NUMBER FROM PO_ORDER WHERE PO_ORDER.AID = FO_FULFILL_TRX_STRING.AID_ORDER_PO )
              END ORDER_NUMBER
              FROM FO_FULFILL_TRX_STRING, AC_TYPE_ORDER.CODE
          ------------------------------------------------------------------------------------------------------------------------------
          MYSQL 正則支持
          select * from tb_rule_list where expression regexp '^.*\\$\\{0}\\[3].*$';
          Oracle  正則函數(shù)支持
          ORACLE中的支持正則表達(dá)式的函數(shù)主要有
              REGEXP_LIKE :與LIKE的功能相似
              REGEXP_INSTR :與INSTR的功能相似
              REGEXP_SUBSTR :與SUBSTR的功能相似
              REGEXP_REPLACE :與REPLACE的功能相
           
          ------------------------------------------------------------------------------------------------------------------------------
          在MYSQL 中 select 可以顯示 不是group by 中的分組字段, 可以是任意的數(shù)據(jù)列,具體數(shù)據(jù)顯示的是分組后的第一行數(shù)據(jù)
          在ORACLE中 select 是嚴(yán)格的 只能顯示group by 中的字段。
          同樣效果的兩行sql --- 讓自己注意提高自己的使用靈活性
          1. select a.aid AAid,nvl(b.cot,0) countline from po_draft_order a,(select AID_DRAFT_ORDER_PO BAID,count(*) cot from  po_draft_line group by AID_DRAFT_ORDER_PO) b WHERE A.AID = B.BAID(+);
          2. select a.aid, (select count(*) from po_draft_line where AID_DRAFT_ORDER_PO = a.aid ) c from po_draft_order a;
          -------------------------------------------------------------------------------------------------------------------------------
          oracle 分級(jí)
          rank()/dense_rank()  over(partition by ... order by ...)  加強(qiáng)對(duì)分組排序之后的數(shù)據(jù)的控制力。
          over:  over(...)
          partition by :  相當(dāng)于group by
          order by e.sal desc:  按工資從高到低排序(使用rank()/dense_rank() 時(shí),必須要帶order by否則非法)
          rank()/dense_rank():  分級(jí)
          整個(gè)語(yǔ)句的意思就是:在按部門劃分的基礎(chǔ)上,按工資從高到低對(duì)雇員進(jìn)行分級(jí),“級(jí)別”由從小到大的數(shù)字表示(最小值一定為1)。 
          那么rank()和dense_rank()有什么區(qū)別呢?
          rank():  跳躍排序,如果有兩個(gè)第一級(jí)時(shí),接下來(lái)就是第三級(jí)。
          dense_rank():  連續(xù)排序,如果有兩個(gè)第一級(jí)時(shí),接下來(lái)仍然是第二級(jí)。
          min()/max() over(partition by ...)  // 分組最大最小值
          lead()/lag() over(partition by order by) // 前后數(shù)據(jù)比較使用
          lead(列名,n,m):  當(dāng)前記錄后面第n行記錄的<列名>的值,沒(méi)有則默認(rèn)值為m;如果不帶參數(shù)n,m,則查找當(dāng)前記錄后面第一行的記錄<列名>的值,沒(méi)有則默認(rèn)值為null。
          lag(列名,n,m):  當(dāng)前記錄前面第n行記錄的<列名>的值,沒(méi)有則默認(rèn)值為m;如果不帶參數(shù)n,m,則查找當(dāng)前記錄前面第一行的記錄<列名>的值,沒(méi)有則默認(rèn)值為null。
          主要是各個(gè)函數(shù)和over的配合使用。
          -----------------------------------------------------------------------------------------------------------------------------------------------------
          Oracle 的集合運(yùn)算
          UNION 用來(lái)合并結(jié)果集 要求返回字段是一樣的。
          JOIN 用來(lái)合并字段。
          并集
          UNION ALL, FULL JOIN -- 重復(fù)出現(xiàn)
          UNION, INNER JOIN minus -- 一次出現(xiàn)
          交集
          intersect
          差集
          minus 
          笛卡爾積
          CROSS JOIN
          ------------------------------------------------------------------------------------------------------------------------------
          INNER JOIN oracle 特殊的寫法 不知道在sqlserver 是否支持。
          SELECT
          *
          FROM (
            SO_WEC_SODL_DESPATCH_HEADER AS SO_WEC_SODL_DESPATCH_HEADER_1
              INNER JOIN (
                (
                  SO_WARRANTY_ENTITLEMENT WET_1
                  INNER JOIN (SO_WARRANTY_ENTITLEMENT INNER JOIN SO_WEC_SODL
                  ON SO_WARRANTY_ENTITLEMENT.AID = SO_WEC_SODL.AID_WARRANTY_ENTITLEMENT_SO
                  ) ON (WET_1.AID_COMPANY = SO_WARRANTY_ENTITLEMENT.AID_COMPANY)
                  AND (WET_1.SEQ_ITEM_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_SEQ_ITEM)
                  AND (WET_1.ITEM_LINE_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_ITEM_NUM)
                  AND (WET_1.SO_LINE_NUM = SO_WARRANTY_ENTITLEMENT.PARENT_SOLINE_NUM)
                  AND (WET_1.SO_NUM = SO_WARRANTY_ENTITLEMENT.SO_NUM)
                )
                INNER JOIN SO_WEC_SODL AS SO_WEC_SODL_1 ON (SO_WEC_SODL.LINE_DELIVERY_NUMBER = SO_WEC_SODL_1.LINE_DELIVERY_NUMBER)
                AND (WET_1.AID = SO_WEC_SODL_1.AID_WARRANTY_ENTITLEMENT)
              ) ON SO_WEC_SODL_DESPATCH_HEADER_1.AID_WEC_SODL = SO_WEC_SODL_1.AID
          ) INNER JOIN SO_WEC_SODL_DESPATCH_HEADER ON SO_WEC_SODL.AID = SO_WEC_SODL_DESPATCH_HEADER.AID_WEC_SODL

          ===


          posted @ 2012-09-12 12:57 a_alter 閱讀(227) | 評(píng)論 (0)編輯 收藏

          2012年9月10日

          今天看Richface4.2文檔的時(shí)候 發(fā)現(xiàn)變動(dòng)很大 紀(jì)錄下

          RichFaces has been developed with an open architecture to be compatible with a wide variety of environments.

          Developing applications with the RichFaces framework requires the Java Development Kit (JDK), an implementation of JavaServer Faces (JSF), and a development environment.

          Java Development Kit (JDK)

          RichFaces supports the following JDK versions:

          JavaServer Faces (JSF)

          RichFaces supports the following JSF implementations and frameworks:

          Development environment

          RichFaces can be developed using most Java development environments. The following are recommended, and used for examples in this guide:







          posted @ 2012-09-10 17:20 a_alter 閱讀(345) | 評(píng)論 (0)編輯 收藏

          2012年9月7日

            在Eclipse 編輯器中加入xmln 提示功能支持

            是針對(duì)項(xiàng)目設(shè)定的, 右擊項(xiàng)目選擇 Properties --》 Project Facets 勾選你需要使用的 schema定義、

          posted @ 2012-09-07 14:30 a_alter 閱讀(469) | 評(píng)論 (0)編輯 收藏

          2012年8月30日

          前序

          用了seam也快一年了, 可惜一直是在做開(kāi)發(fā), 今天決定回頭總結(jié)下, 并且去看一下JSF , SEAM 的配置。

          seam 簡(jiǎn)單介紹

          直接看英文吧, 翻譯的不行

          Seam is a powerful open source development platform for building rich Internet applications in Java. Seam integrates technologies such as Asynchronous JavaScript and XML (AJAX), JavaServer Faces (JSF), Java Persistence (JPA), Enterprise Java Beans (EJB 3.0) and Business Process Management (BPM) into a unified full-stack solution, complete with sophisticated tooling.

          Seam has been designed from the ground up to eliminate complexity at both architecture and API levels. It enables developers to assemble complex web applications using simple annotated Java classes, a rich set of UI components, and very little XML. Seam's unique support for conversations and declarative state management can introduce a more sophisticated user experience while at the same time eliminating common bugs found in traditional web applications.


          我們可以看到seam 和 jsf,jpa,ejb 結(jié)合比較緊密,提供了annotation 方式支持, 提供了大量的 ui components 支持。

          想說(shuō)的一點(diǎn)是, seam不是一個(gè)框架, 而是一個(gè)平臺(tái)。


          附:
          JSF 資料查詢  http://caterpillar.onlyfun.net/Gossip/JSF/IntroduceJSF.htm

          http://docs.oracle.com/javaee/5/tutorial/doc/bnaph.html

          ==== seam 提供了一個(gè)定制的eclipse版本用于seam開(kāi)發(fā),省了很多事

          posted @ 2012-08-30 09:38 a_alter 閱讀(197) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 剑川县| 南京市| 海城市| 桃源县| 武义县| 萨迦县| 宝鸡市| 临城县| 连城县| 宝丰县| 隆德县| 蓬溪县| 华池县| 宁安市| 新沂市| 乌拉特前旗| 阿勒泰市| 石家庄市| 肥乡县| 富民县| 浦北县| 嘉兴市| 肃宁县| 澄江县| 通山县| 杭锦旗| 安乡县| 句容市| 越西县| 新巴尔虎右旗| 霍山县| 天峨县| 乐亭县| 奉节县| 乐东| 西乌| 葫芦岛市| 济宁市| 林芝县| 黎城县| 行唐县|