@@ -514,11 +514,27 @@ create or replace package body test_ut_run is
514514 end;
515515
516516 procedure create_test_suite is
517+ l_service_name varchar2(100);
517518 pragma autonomous_transaction;
518519 begin
520+ select global_name into l_service_name from global_name;
521+ execute immediate
522+ 'create public database link db_loopback connect to ut3_tester identified by ut3
523+ using ''(DESCRIPTION=
524+ (ADDRESS=(PROTOCOL=TCP)
525+ (HOST='||sys_context('userenv','SERVER_HOST')||')
526+ (PORT=1521)
527+ )
528+ (CONNECT_DATA=(SERVICE_NAME='||l_service_name||')))''';
519529 execute immediate q'[
520530 create or replace package stateful_package as
531+ function get_state return varchar2;
532+ end;
533+ ]';
534+ execute immediate q'[
535+ create or replace package body stateful_package as
521536 g_state varchar2(1) := 'A';
537+ function get_state return varchar2 is begin return g_state; end;
522538 end;
523539 ]';
524540 execute immediate q'[
@@ -527,11 +543,11 @@ create or replace package body test_ut_run is
527543 --%suitepath(test_state)
528544
529545 --%test
530- --%beforetest(acquire_state,recompile_in_background )
546+ --%beforetest(acquire_state_via_db_link,rebuild_stateful_package )
531547 procedure failing_stateful_test;
532548
533- procedure recompile_in_background ;
534- procedure acquire_state ;
549+ procedure rebuild_stateful_package ;
550+ procedure acquire_state_via_db_link ;
535551
536552 end;
537553 ]';
@@ -540,39 +556,23 @@ create or replace package body test_ut_run is
540556
541557 procedure failing_stateful_test is
542558 begin
543- ut3.ut.expect(stateful_package.g_state ).to_equal('abc');
559+ ut3.ut.expect(stateful_package.get_state@db_loopback ).to_equal('abc');
544560 end;
545561
546- procedure recompile_in_background is
547- l_job_name varchar2(30) := 'recreate_stateful_package';
548- l_cnt integer := 1;
562+ procedure rebuild_stateful_package is
549563 pragma autonomous_transaction;
550564 begin
551- dbms_scheduler.create_job(
552- job_name => l_job_name,
553- job_type => 'PLSQL_BLOCK',
554- job_action => q'/
555- begin
556- execute immediate q'[
557- create or replace package stateful_package as
558- g_state varchar2(3) := 'abc';
559- end;]';
560- end;/',
561- start_date => localtimestamp,
562- enabled => TRUE,
563- auto_drop => TRUE,
564- comments => 'one-time job'
565- );
566- dbms_lock.sleep(1);
567- while l_cnt > 0 loop
568- select count(1) into l_cnt
569- from dba_scheduler_running_jobs srj
570- where srj.job_name = l_job_name;
571- end loop;
565+ execute immediate q'[
566+ create or replace package body stateful_package as
567+ g_state varchar2(3) := 'abc';
568+ function get_state return varchar2 is begin return g_state; end;
569+ end;
570+ ]';
572571 end;
573- procedure acquire_state is
572+
573+ procedure acquire_state_via_db_link is
574574 begin
575- dbms_output.put_line('stateful_package.g_state ='||stateful_package.g_state );
575+ dbms_output.put_line('stateful_package.get_state@db_loopback ='||stateful_package.get_state@db_loopback );
576576 end;
577577 end;
578578 }';
@@ -589,10 +589,9 @@ create or replace package body test_ut_run is
589589 failing_stateful_test [% sec] (FAILED - 1)%
590590Failures:%
591591 1) failing_stateful_test
592- ORA-04061: existing state of package "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
593- ORA-04065: not executed, altered or dropped package "UT3_TESTER.STATEFUL_PACKAGE"
594- ORA-06508: PL/SQL: could not find program unit being called: "UT3_TESTER.STATEFUL_PACKAGE"
595- ORA-06512: at "UT3_TESTER.TEST_STATEFUL", line 5%
592+ ORA-04068: existing state of packages (DB_LOOPBACK) has been discarded
593+ ORA-04061: existing state of package body "UT3_TESTER.STATEFUL_PACKAGE" has been invalidated
594+ ORA-04065: not executed, altered or dropped package body "UT3_TESTER.STATEFUL_PACKAGE"%
596595 ORA-06512: at line 6%
5975961 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)%';
598597
@@ -613,6 +612,7 @@ Failures:%
613612 begin
614613 execute immediate 'drop package stateful_package';
615614 execute immediate 'drop package test_stateful';
615+ begin execute immediate 'drop public database link db_loopback'; exception when others then null; end;
616616 end;
617617
618618 procedure run_in_invalid_state is
0 commit comments