2011-04-01 35 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