Search code examples
sqloracleplsqlsql-delete

How to remove(delete) multiple users from different tables using PL/SQL


I wrote this query to delete one user from different tables using pl/sql.

Example: I run this query to delete one user:

user SPIKETJ, code 01234, code_id 85412974 and l_code_user SPIKETJ

declare 
  l_code_name  table_2.cod_name%type;
  l_code       table_2.cod_emp%type;
  l_code_id    table_0.cod_id%type;
  l_code_user  table_03.cod_user%type;    
begin
  l_code_name := 'SPIKETJ';
  l_code := '01234';
  l_code_id := '85412974';
  l_code_user := 'SPIKETJ';

  DELETE table_2 WHERE cod_emp  IN (l_code);
  commit;

  DELETE table_65 WHERE cod_emp IN (l_code);
  commit;

  DELETE table_41 WHERE cod_name IN (l_code_name);
  commit;

  DELETE table_18 WHERE cod_name IN (l_code_name);
  commit;

  DELETE table08 WHERE cod_user IN (l_code_name);
  commit;

  DELETE table_0 WHERE cod_docum IN (l_code_id);
  commit;

  DELETE table_17 WHERE cod_id IN (l_code_id);
  commit;

  DELETE table_03 WHERE cod_user IN (l_code_user);
  commit;

END;

When I have to delete one user I only change/assign values for: l_code_name, l_code, l_code_id, l_code_user.

But now, I have to delete almost 20 users! So I wanna know if I have to run this query 20 times changing the variable values each time ?

OR

Can I write a query/block where running one time deletes the 20 users I wish to?


Solution

  • You can Create procedure as suggested above by Tony Andrews.

    Procedure

    Create or replace Procedure Delete_user
    (l_code_name IN your_users.cod_name%type,    --   Declare your IN parameters here
    l_code       IN your_users.cod_emp%type,
    l_code_id    IN your_users.cod_id%type,
    l_code_user  IN your_users.cod_user%type
    )
    AS
    --   Declare your local variables
    v_code_name your_users.cod_name%type := l_code_name;    
    v_code      your_users.cod_emp%type  := l_code;
    v_code_id   your_users.cod_id%type   := l_code_id ;
    v_code_user your_users.cod_user%type := l_code_user;
    BEGIN
    --- write your code(delete statements)
    DELETE from your_users
    WHERE cod_emp  IN (v_code);
    commit;
    dbms_output.put_line( 'USER : ' || ' ' ||  v_code_user || ' is deleted.' );
    ---
    --- similarly other delete statements
    END DELETE_USER;
    

    Output:

    Procedure created.
    

    check for errors using below command :

    Show errors;

    no errors

    Call your Procedure for deleting users :

     BEGIN
     DELETE_USER('SPIKETJ',01234,85412974,'SPIKETJ');
     DELETE_USER('JACKET',99999,111111,'JACKET');
     --similary add other user details in order of the parameters declared in proc
     END;
    

    OUTPUT :

    USER :  SPIKETJ is deleted.
    USER :  JACKET is deleted.
    
    Statement processed.
    

    Read more here Procedures