下面是兩個資料表bmb_file與bmt_file,簡稱bmb和bmt
主要功能是bmt內有BMB01、BMB02、BMB03這三個欄位
當三個欄位相同各自時把BMT06合併,並不顯示重複資料
現在要把合併後的BMT06寫入bmbud01 (不管bmbud01是否有資料)
如下,但出現
錯誤報告 -
ORA-01427: 單列子查詢所傳回的資料列不只一列
UPDATE bmb_file SET (bmbud01)
=( select bmt.BMT06
from bmb_file bmb
join ( select bmt.BMT01,bmt.BMT02,bmt.BMT03
, ( select WMSYS.WM_CONCAT(BMT06) as BMT06
from bmt_file
where BMT01 = bmt.BMT01 and BMT02 = bmt.BMT02 and BMT03 = bmt.BMT03
) as BMT06
from bmt_file bmt
group by bmt.BMT01,bmt.BMT02,bmt.BMT03
order by bmt.BMT01,bmt.BMT03
) bmt on BMB01 = bmt.bmt01 and BMB02 = bmt.bmt02 and BMB03 = bmt.bmt03
);
update (select bmb.BMBUD01 BMBUD01,bmt.BMT06 BMT06
from bmb_file bmb
join ( select bmt.BMT01,bmt.BMT02,bmt.BMT03
, ( select WMSYS.WM_CONCAT(BMT06) as BMT06
from bmt_file
where BMT01 = bmt.BMT01 and BMT02 = bmt.BMT02 and BMT03 = bmt.BMT03
) as BMT06
from bmt_file bmt
group by bmt.BMT01,bmt.BMT02,bmt.BMT03
order by bmt.BMT01,bmt.BMT03
) bmt on BMB01 = bmt.bmt01 and BMB02 = bmt.bmt02 and BMB03 = bmt.bmt03) set BMBUD01=BMT06
命令行:15, 資料欄:5 發生錯誤
錯誤報告 -
SQL 錯誤: ORA-01779: 無法修改對應非保留索引鍵表格的資料欄
01779. 00000 - "cannot modify a column which maps to a non key-preserved table"
*Cause: An attempt was made to insert or update columns of a join view which
map to a non-key-preserved table.
*Action: Modify the underlying base tables directly.
大大好
我有找到下面資訊,是否還有其他方式來進行回傳,如函數
<回傳資料>
預存程序的基本概念就是執行SQL指令作資料庫的資料處理(甚至是結構變動),並沒有提到回傳值這個地位有點模糊的話題。
這一點在MS-SQL和Oracle資料庫上就有很大的不同,在Oracle資料庫裡,預存程序真的只用於進行資枓處理,而完全沒有回傳資料的功能(事實上它還是可以回傳值給呼叫它的程式,只是無法利用SQL指令取回資料,也無法應用在AW3系統裡);但MS-SQL資料庫中,則是可以在預存程式裡 SELECT 一個表格,它真的會將SELECT指令的執行結果回傳。
要將插件位置回寫到BMB_FILE 的UD欄位的作動是一次性作業,還是經常性作業.
一次性作業:建議先將BMT_FILE 的SELECT 產生一個中間檔. 再用這個中間檔的資料回寫到BMB_FILE .
如果是經常性作業建議將程式放在 abmi601 中.每一顆料維護完成時,即回寫到bmbud01 中.
是一次性的,中間檔有資料可以參考嗎? 或是相關語法
update (select /*+ BYPASS_UJVC */ bmb.BMBUD01 BMBUD01,bmt.BMT06 BMT06
from bmb_file bmb
join ( select bmt.BMT01,bmt.BMT02,bmt.BMT03
, ( select WMSYS.WM_CONCAT(BMT06) as BMT06
from bmt_file
where BMT01 = bmt.BMT01 and BMT02 = bmt.BMT02 and BMT03 = bmt.BMT03
) as BMT06
from bmt_file bmt
group by bmt.BMT01,bmt.BMT02,bmt.BMT03
order by bmt.BMT01,bmt.BMT03
) bmt on BMB01 = bmt.bmt01 and BMB02 = bmt.bmt02 and BMB03 = bmt.bmt03) set BMBUD01=BMT06
THANKS 我在試試