2011-10-20 49 views
1

是一個PL/SQL新手...正在尋求一種方法來做到這一點:如何通過在PL/SQL中查詢另一個數據庫來設置一個數據庫中的值?

  1. 查詢基於特定條件的數據庫。
  2. 基於這些條件的結果來更新具有特定值的不同 數據庫表。

例如

數據庫:A(包含我尋找查詢數據)

數據庫:B(含有表2列,我希望更新)

condition.sql:

select typ_cd 
from A.mytable 
where typ_cd = "AAA" 

if typ_cd = "AAA" UPDATE B SET VAL = "P" 

如果有人能夠告訴我如何將我的僞代碼轉換爲可用的PL/SQL腳本,將不勝感激。

+2

首先,你確定你有兩個單獨的數據庫,而不是兩個模式在同一個數據庫?像SQL Server這樣的其他產品認爲「數據庫」更像Oracle中的模式,因此常常會對術語產生一些混淆。其次,兩張桌子之間的關係是什麼?你真的想更新B中的每一行以獲得'P'的VAL嗎?或者是否想要更新B中的特定行或一組行(即只有那些行中typ_cd ='AAA')?第三,你真的只是檢查typ_cd'AAA'行是否存在嗎? –

+0

是的,它在同一個Oracle 11g數據庫中有兩種不同的模式。基本上,我正在使用PL/SQL腳本編寫測試,其中A是具有實際數據的數據庫,B是包含以下屬性(列名稱)的數據庫:測試SQL腳本的名稱,狀態(Pass的「P」,F 「爲失敗),時間戳列和另一個唯一的ID。應該有關係嗎? –

+1

由於我們不必創建數據庫鏈接,因此兩種不同的架構明確地使事情變得更容易。需要根據A查詢的結果來確定B模式中表中的哪一行需要更新,或許您知道B中的表中您要更新的特定行是基於其他本地變量在你的PL/SQL代碼中而不是基於A中的數據?否則,需要在表格之間建立某種關係或者確定B中的表格中的哪一行需要更新。 –

回答

0

試試這個,

DECLARE 
    cursor item_cursor 
    is 
     select typ_cd 
     from A.mytable 
     where typ_cd = "AAA"; 

    item_val item_cursor%ROWTYPE ; 
    cnt INTEGER(5) := 0 ; 
BEGIN 
    open item_cursor ; 
    loop 
     fetch item_cursor into item_val ; 
     exit when item_cursor%NOTFOUND ; 
     cnt := cnt + 1 ; 
    end loop ; 
    close item_cursor ; 

    if (cnt > 0) 
    then 
     insert into B 
     values(cnt) ; 
    end if ; 
END; 
/

我希望這應該工作。

快樂查詢....

尚穆根

相關問題