我正在尝试编写一个powershell脚本来帮助跨多个数据库执行一些用户维护任务。
这里基本上是我想要在伪代码中完成的,但我对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 :(得分:2)
我很想不要在这里使用PowerShell。相反,我会使用database link。数据库链接将Database2连接到Database1,并允许我将数据从Database1拉到Database2。
使用
之类的东西创建数据库链接CREATE DATABASE LINK Database1 CONNECT TO user IDENTIFIED BY password USING 'database1_tns_name';
将user
和password
替换为Database1上架构所有者的用户名和密码,将database1_tns_name
替换为Database2的tnsnames.ora
文件中TNS名称为Database1。 (如果Database1的tnsnames.ora
文件中尚不存在,则可能需要为Database1创建一个条目。)
然后,我将在Database2上运行类似于以下内容的PL / SQL块:
DECLARE
v_employeeType users.employeeType@Database1%TYPE;
BEGIN
FOR user_rec IN (SELECT userID FROM users)
LOOP
SELECT employeeType INTO v_employeeType
FROM users@Database1
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;
答案 1 :(得分:0)
如果您只是让PowerShell对SQLPLUS执行两次系统调用,并执行从第一次调用的输出生成的SQL脚本,该怎么办?
类似的东西:
如果您不想使用SQLPlus,请记住PowerShell可以使用.NET框架,因此您可以实例化几个数据库连接对象并直接执行查询,将结果返回到.NET对象。