2011-04-01 40 views
3

我想寫一個powershell腳本來幫助跨多個數據庫的一些用戶維護任務。如何從powershell執行PL/SQL包?

  • 數據庫1包含了用戶ID和用戶類型(例如:員工,分包商等)
  • 數據庫2包含有許多PL/SQL程序包和程序,我可以執行更新信息數據庫這個分貝。

這裏基本上是我想要在僞代碼中完成的工作,但是我對PL/SQL程序包和程序沒有太多經驗,特別是從PowerShell中。

是否有可能從powershell執行wwsec_api.set_defaultgroup過程?

SELECT userID FROM Database2.users 

while (userID){ 
    SELECT employeeType FROM Database1.users WHERE Database2.users.userID = Database1.users.userID 

    If employeeType = 'Employee' then 
     run Database2 PL/SQL package procedure wwsec_api.set_defaultgroup(ID, USER) 
    end if 
} 

回答

0

如果你只是有PowerShell中做兩個系統調用SQLPLUS,並執行您從第一次調用的輸出生成的SQL腳本?

喜歡的東西:

  • 執行SQL查詢加對DB 1,返回結果到文件中。
  • 讀取文件併爲每個用戶執行鍼對DB2的SQL plus。
  • 比較結果員工類型,如果是員工,則再次執行SQL plus。

如果您不想使用SQLPlus,請記住PowerShell可以使用.NET框架,因此您可以實例化幾個數據庫連接對象並直接執行查詢,並將結果返回到.NET對象中。

2

我不想在這裏使用PowerShell。相反,我會使用database link。數據庫鏈接將Database2連接到Database1,並允許我將數據從Database1拖到Database2。

創建使用什麼數據庫鏈接像

CREATE DATABASE LINK Database1 CONNECT TO user IDENTIFIED BY password USING 'database1_tns_name'; 

與數據庫1中的Database2的tnsnames.ora文件的TNS名稱替換userpassword與數據庫1的模式所有者的用戶名和密碼,database1_tns_name。 (您可能需要如果它不已經的Database2的tnsnames.ora文件存在創建數據庫1項。)

然後,我會運行類似於在對的Database2之後的PL/SQL塊:

DECLARE 
    v_employeeType  [email protected]%TYPE; 
BEGIN 
    FOR user_rec IN (SELECT userID FROM users) 
    LOOP 
    SELECT employeeType INTO v_employeeType 
     FROM [email protected] 
    WHERE userID = user_rec.userID; 

    IF v_employeeType = 'Employee' THEN 
     -- Check the parameters of this procedure - where does ID come from, 
     -- and do you really want to use the built-in function USER, which 
     -- returns the name of the currently-connected user? 
     wwsec_api.set_defaultgroup(ID, USER); 
    END IF; 
    END LOOP; 
END; 
+0

這種方法可行,但有幾個問題(可能有解決方法?)我需要能夠安排它每天運行,並且能夠隨意運行它。此外,我需要能夠更新腳本/ SQL /程序和我們的DBA的保持數據庫鎖定(他們應該)相當不錯。如果我找不到從我的電腦上運行此操作的方法,我一定會走這條路。 – ProfessionalAmateur 2011-04-01 19:40:59

+0

@專業業餘愛好者:您可以創建一個過程而不是匿名塊。然後,您可以隨時從SQL * Plus調用它,也可以使用DBMS_SCHEDULER進行調度。這正是PL/SQL所做的。如果您可以將代碼保存在服務器上,它可能會更快,更易於管理並且更安全。 – 2011-04-02 02:57:40