执行立即创建用户

时间:2019-05-17 19:14:03

标签: plsql oracle-sqldeveloper procedure

我想创建一个创建用户的过程,以便我编写:

但是出现以下错误:

01002. 00000 -  "fetch out of sequence"
*Cause:    This error means that a fetch has been attempted from a cursor
       which is no longer valid.  Note that a PL/SQL cursor loop
       implicitly does fetches, and thus may also cause this error.
       There are a number of possible causes for this error, including:
       1) Fetching from a cursor after the last row has been retrieved
       and the ORA-1403 error returned.
       2) If the cursor has been opened with the FOR UPDATE clause,
       fetching after a COMMIT has been issued will return the error.
       3) Rebinding any placeholders in the SQL statement, then issuing
       a fetch before reexecuting the statement.
*Action: 
  1) Do not issue a fetch statement after the last row has been
       retrieved - there are no more rows to fetch.
  2) Do not issue a COMMIT inside a fetch loop for a cursor
       that has been opened FOR UPDATE.
  3) Reexecute the statement after rebinding, then attempt to
       fetch again.
CREATE OR REPLACE PROCEDURE CREA_USUARIOS_PR IS
    CURSOR EMPLEADOS_LISTA IS SELECT ID,NOMBRE,DNI FROM EMPLEADO FOR UPDATE;
    SENTENCIA VARCHAR2(1000);
BEGIN
    FOR EMPLEADO_PUNTERO IN EMPLEADOS_LISTA LOOP
        SENTENCIA:= 'CREATE USER '||CONCAT(REPLACE(EMPLEADO_PUNTERO.NOMBRE,' ',''),CONCAT(to_char(EMPLEADO_PUNTERO.ID),'MERC'))||' IDENTIFIED BY '||to_char(EMPLEADO_PUNTERO.DNI)||' DEFAULT TABLESPACE TS_MERC QUOTA 10M ON TS_MERC';
        EXECUTE IMMEDIATE SENTENCIA;
        UPDATE EMPLEADO SET USUARIO = CONCAT(REPLACE(EMPLEADO_PUNTERO.NOMBRE,' ',''),CONCAT(EMPLEADO_PUNTERO.ID,'MERC')) WHERE CURRENT OF EMPLEADOS_LISTA;
    END LOOP;
END;
/

0 个答案:

没有答案