討論區快速選單
知識庫快速選單
Top1安全軟體開發知識-CSSLP 政府補助!學嵌入式+物聯網 虛擬社群公民行為研究
[ 回上頁 ] [ 討論區發言規則 ]
請問該如何遞回的找出bom表資料?
更改我的閱讀文章字型大小
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/17 下午 03:35:24
我們要用輸入一成品料號及生產數量;
然後展至尾階, 而列出所有尾階料號及所需數量
問朋友... 好像都沒人會. 現在只有個大概的方向
用 store procedure再加function

但我不知道如何撰寫. 但我知道程式的邏輯
就是先找出此成品的下階料,
select bom03(下階料),bom06(數量)
from bom_file where bmb01=成品

再用找出來的料號判斷是否有下階料,
select count(*) as t_qty from bom_file
where bom01=bom03"剛找出來的料號"
如果t_qty大於0就繼續展(以下的指令), 若沒有就把它回傳回去(尾階料, 及數量)

select bom03,bom06
from bom_file
where bmb01="剛找出來的料號"

如此我該如何撰寫這程式啊...
那位高手........請幫忙指導一下.
謝謝您!
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/17 下午 05:09:35
請問資料庫版本?

參考 5 樹型查詢 Hierarchical Queries
http://www.hkln.net/doc/oracle_sql_advance.zip
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/18 上午 08:35:41
資料庫版本 Oracle9i
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/18 下午 04:19:36
a.... 資料我看了, 但我的執行結果, 只展出第一層就沒有往下層
指令如下:
select level ,bom03
from bom_file
start with bom01=成品料號
connect by prior bom01 = bom03 -bom01是成品 bom03是下階料

而且, 我需要只展出尾階的資料, 中間的料號不需要.
例如: A
     / \
     B C
     /\ /\
    D E F G

當查詢A成品時, 就列出D E F G 這四個料號
而現在執行結果只列出 B C...

研究了好久..... 找不出所以然....
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/18 下午 05:58:38

確定一下 BOM_FILE 資料表是否這樣設計:

ID,NAME,PARENT_ID
1,A,<NULL>
2,B,1
3,C,1
4,D,2
5,E,2
6,F,3
7,G,3


例如 C 的 PARENT_ID 是 1 ,代表 C 的父為 A。

把 BOM03 和 BOM01 對應這裡的 ID 和 PARENT_ID,

SELECT ID, NAME
START WITH ID = 1
CONNECT BY PRIOR ID = PARENT_ID


> 當查詢A成品時, 就列出D E F G 這四個料號

要到 10G 才能夠用 CONNECT_BY_ISLEAF 方便分辨出 Leaf Nodes

http://www.dbazine.com/oracle/or-articles/mishra3

不過你可以用 WHERE ID NOT IN (SELECT PARAENT_ID FROM TABLE WHERE PARENT_ID IS NOT NULL),
因為 Leaf Nodes 不是任何一行的 PARENT_ID
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/19 上午 09:38:04
可是我們的table結構如下
b01,b02,bo3( 父 ,項次,子)
A ,10 ,B
A ,20 ,C
B ,10 ,D
B ,20 ,E
C ,10 ,F
C ,20 ,G
而我們有另一個table都只放父節點table結構如下
a01
A
B
C

如此情況還適用這樹型查詢嗎?
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/19 下午 12:20:18
也可以

SELECT
LPAD( , 4 * (LEVEL - 1) ) || B03 AS DISPLAY
, B02 AS SEQ
, B01 AS PARENT
FROM BOM_FILE
START WITH B01 = A
CONNECT BY PRIOR B03 = B01

然後用上述方法找出 Leaf Nodes。
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/20 下午 01:47:31
可是用此語法就會出現錯誤
ORA-01436: CONNECT BY loop in user data

所以我才會用以下的語法; 可是找出來的都只有第一層的資料
select level ,bom03
from bom_file
start with bom01=成品料號
connect by prior bom01 = bom03 -bom01是成品 bom03是下階料

另外請問; 是不是樹型查詢就不能用where ?
因為我在connect by的下一行加上where bmb03 not in (select bma01 from bma_file)
就會出現ORA-00933: SQL command not properly ended
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/20 下午 05:50:32
ORA-01436 不是語法錯誤,是資料錯誤,例如:

ID,PARENT_ID
1,2
2,1

這樣會產生無窮迴圈。可以改用 CONNECT BY NOCYCLE,
或用 CONNECT_BY_ISCYCLE 找出問題資料(不知 9i 是否支援)

http://thinktibits.blogspot.com/2008/07/so-what-is-problem-i-got-error-ora.html

> 另外請問; 是不是樹型查詢就不能用where ?

WHERE 應加在 FROM 之後
http://www.oracle.com/technology/products/oracle9i/daily/oct04.html
作者 : 102056665(許)
[ 貼文 27 | 人氣 1216 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/21 上午 08:08:37
1. 利用stack 觀念處理
2. 建立 矩陣 方式處理
作者 : liumichelle(Michelle)
[ 貼文 6 | 人氣 337 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/21 下午 04:56:32
殘念..... oracle 9i無法使用CONNECT BY NOCYCLE,

那請問下列方法如何做?
1. 利用stack 觀念處理
2. 建立 矩陣 方式處理
可否提供個範本以供研究?
謝謝大家的幫忙!! 感恩您!!
作者 : hkln(HKLN.net) Perl卓越專家Oracle卓越專家資訊類作業求救優秀好手一般優秀好手程式設計甘苦談優秀好手C#卓越專家貼文超過2000則人氣指數超過100000點
[ 貼文 2135 | 人氣 122272 | 評價 14600 | 評價/貼文 6.84 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/21 下午 07:27:45
>殘念..... oracle 9i無法使用CONNECT BY NOCYCLE,

如果你想找出那些導致迴圈的資料,並修服它,請參考
http://oraclesqlpuzzle.hp.infoseek.co.jp/8-43.html
 板主 : 徵求中
 > Oracle - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Oracle - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Oracle
1 Ricky 3260 
2 HKLN.net 1650 
3 falcon 300 
4 Leon Chou 230 
5 180 
6 sunnychen 100 
7 凡人 90 
8 萬惡我為首 80 
9 SAP 80 
10 阿德 80 
Oracle
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2014 程式設計俱樂部 http://www.programmer-club.com.tw/
7.800293E-02