我正在尝试编写Powershell脚本来帮助完成多个数据库中的某些用户维护任务。

  • 数据库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
    }
    

    最佳答案

    我很想在这里不使用PowerShell。相反,我将使用database link。数据库链接会将Database2连接到Database1,并允许我将数据从Database1提取到Database2。

    您使用类似的方法创建数据库链接

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

    在Database2的user文件中,将passworddatabase1_tns_name替换为Database1上模式所有者的用户名和密码,并用数据库1的TNS名称替换tnsnames.ora。 (如果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;
    

    关于oracle - 如何从Powershell执行PL/SQL包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5517043/

    10-08 22:52
    查看更多