Oracle PL/SQL流程:措辞问题

Oracle PL/SQL流程:措辞问题,oracle,stored-procedures,plsql,oracle-apex,Oracle,Stored Procedures,Plsql,Oracle Apex,我正在尝试在Oracle APEX 4.1中创建一个页面进程。具体地说,当这个页面上的一个按钮正在提交页面时,我希望这个PL/SQL查询能够工作。我对PL/SQL没有太多的了解,我想知道如何解决这个问题 我希望查询执行的操作: 我希望这个页面进程循环遍历APEX数据库中EMPLOYEE表中的每一行。对于每一行,我想将用户名、组和密码移动到它们自己的变量中,然后使用APEX\u UTIL\u create\u user进程创建一个APEX用户。我想让表中的每个员工都这样做 我不知道这个PL/SQL

我正在尝试在Oracle APEX 4.1中创建一个页面进程。具体地说,当这个页面上的一个按钮正在提交页面时,我希望这个PL/SQL查询能够工作。我对PL/SQL没有太多的了解,我想知道如何解决这个问题

我希望查询执行的操作:

我希望这个页面进程循环遍历APEX数据库中EMPLOYEE表中的每一行。对于每一行,我想将用户名、组和密码移动到它们自己的变量中,然后使用APEX\u UTIL\u create\u user进程创建一个APEX用户。我想让表中的每个员工都这样做

我不知道这个PL/SQL到底出了什么问题,因为我以前从未使用过它。我非常感谢任何人能在这方面给我的帮助。我将在下面显示查询和错误消息

PL/SQL查询:

PROCEDURE deploy_employee 
(EMP_USERNAME IN EMPLOYEE)

IS

BEGIN

  FOR indx IN NVL (EMP_USERNAME.FIRST, 0) 
                .. NVL (EMP_USERNAME.LAST, -1)

  LOOP

    emp_user EMPLOYEE.EMP_USERNAME%TYPE;
    emp_pass EMPLOYEE.EMP_PASSWORD%TYPE;
    emp_group EMPLOYEE.EMP_GROUP%TYPE;

BEGIN

    BEGIN

      select EMP_USERNAME into emp_user from EMPLOYEE;
      select EMP_PASSWORD into emp_pass from EMPLOYEE;
      select EMP_GROUP into emp_group FROM EMPLOYEE;

    EXCEPTION

      WHEN NO_DATA_FOUND THEN

        emp_user := NULL;
        emp_pass := NULL;
        emp_group := NUL;

      END;

      APEX_UTIL.CREATE_USER(
        p_user_name    => emp_user,
        p_web_password => emp_pass,
        p_user_group => emp_gorup,
      );
END;

END LOOP;

END deploy_employee;
错误消息:

发生
1错误ORA-06550:第2行第1列:PLS-00103:
在预期出现以下情况之一时遇到符号“过程”
以下内容:(begin case为goto if循环声明end异常退出
mod null pragma raise return select update with with with with with

您的程序存在多个问题

  • 您缺少CREATE关键字,这是编译时错误的根本原因。
    PLS-00103
  • 有关创建独立存储过程或调用规范的详细信息,请参阅文档

    雇员中的EMP_用户名

  • IN参数的数据类型声明不正确。您需要按照以下步骤执行:
  • 现在,让我们测试一下,看看:

    SQL> set serveroutput on
    SQL> EXEC deploy_emp(7369);
    SMITH
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    使用
    CREATE PROCEDURE
    创建新的存储过程,或使用
    EXEC
    执行它

    如果在页面进程中不执行所有这些操作,则不需要创建过程。将此代码放入页面进程的源代码中:

    BEGIN
      FOR indx IN (
        select *
         from EMPLOYEE
      ) LOOP
          APEX_UTIL.CREATE_USER(
            p_user_name    => indx.EMP_USERNAME,
            p_web_password => indx.EMP_PASSWORD,
            p_user_group => indx.EMP_GROUP,
          );
      END LOOP;
    END;
    

    非常感谢,我错了!
    SQL> CREATE OR REPLACE
      2  PROCEDURE deploy_emp(
      3      i_emp emp.empno%type)
      4  IS
      5    emp_user VARCHAR2(50);
      6  BEGIN
      7    FOR indx IN
      8    (SELECT ename FROM emp
      9    )
     10    LOOP
     11      BEGIN
     12        BEGIN
     13          SELECT ename INTO emp_user FROM emp WHERE empno = i_emp;
     14        EXCEPTION
     15        WHEN NO_DATA_FOUND THEN
     16          emp_user := NULL;
     17        END;
     18      END;
     19    END LOOP;
     20    dbms_output.put_line(emp_user);
     21  END deploy_emp;
     22  /
    
    Procedure created.
    
    SQL> sho err
    No errors.
    
    SQL> set serveroutput on
    SQL> EXEC deploy_emp(7369);
    SMITH
    
    PL/SQL procedure successfully completed.
    
    SQL>
    
    BEGIN
      FOR indx IN (
        select *
         from EMPLOYEE
      ) LOOP
          APEX_UTIL.CREATE_USER(
            p_user_name    => indx.EMP_USERNAME,
            p_web_password => indx.EMP_PASSWORD,
            p_user_group => indx.EMP_GROUP,
          );
      END LOOP;
    END;