Set ServerOutput On

create or replace package Wait is

  procedure Go;
  procedure Finish;
end Wait;
/
Show Errors


create or replace package body Wait is
  g_pipe_name constant varchar2(30) := 'Slow_Motion';

  procedure Go is
    v_dummy integer; v_item varchar2(4000);

  begin
    Dbms_Pipe.Purge ( pipename => g_pipe_name );

    -- The following call to Receive_Message will
    -- wait until another session calls Wait.Finish
    v_dummy := Dbms_Pipe.Receive_Message ( pipename => g_pipe_name );
    Dbms_Pipe.Unpack_Message ( item => v_item );

  end Go;

  procedure Finish is
    v_dummy integer;
  begin
    Dbms_Pipe.Pack_Message ( item => 'stop' );
    v_dummy := Dbms_Pipe.Send_Message ( pipename => g_pipe_name );
  end Finish;

end Wait;
/
Show Errors
grant execute on Wait to public;