set serveroutput on
Unsupported Command
set feedback off
Unsupported Command
CREATE OR REPLACE PACKAGE p1 AS
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p1 AS
function get_field_value(p_rec typ_rec) return varchar2
AS
begin
return p_rec.field;
end;
end;
Package Body created.
CREATE OR REPLACE PACKAGE p2 AS
function get_field_value return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p2 AS
function get_field_value return varchar2
as
l_rec p1.typ_rec;
begin
return p1.get_field_value(l_rec);
end;
end;
Package Body created.
PROMPT
Unsupported Command
PROMPT ==============================================
Unsupported Command
PROMPT P1 and P2 were created, everything is ok
Unsupported Command
PROMPT ==============================================
Unsupported Command
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
CREATE OR REPLACE PACKAGE p1 AS
dummy CONSTANT varchar2(4) := 'XXXX';
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
alter package p1 compile
Package altered.
select object_name, object_type, status, timestamp from user_objects where object_name like 'P_'
OBJECT_NAME | OBJECT_TYPE | STATUS | TIMESTAMP | P1 | PACKAGE | VALID | 2024-05-09:07:58:26 | P1 | PACKAGE BODY | VALID | 2024-05-09:07:58:26 | P2 | PACKAGE | VALID | 2024-05-09:07:58:25 | P2 | PACKAGE BODY | VALID | 2024-05-09:07:58:25 |
---|
PROMPT
Unsupported Command
PROMPT ==============================================
Unsupported Command
PROMPT P1 specification was changed, P2 is valid and now returns the value of different constant!
Unsupported Command
PROMPT ==============================================
Unsupported Command
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different: ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
ERROR: values are different: 0000 != XXXX
alter package p2 compile
Package altered.
PROMPT
Unsupported Command
PROMPT ==============================================
Unsupported Command
PROMPT After manual recompile of P2, everything works again
Unsupported Command
PROMPT ==============================================
Unsupported Command
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
drop package p1
Package dropped.
drop package p2
Package dropped.
set serveroutput on
Unsupported Command
set feedback off
Unsupported Command
CREATE OR REPLACE PACKAGE p1 AS
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p1 AS
function get_field_value(p_rec typ_rec) return varchar2
AS
begin
return p_rec.field;
end;
end;
Package Body created.
CREATE OR REPLACE PACKAGE p2 AS
function get_field_value return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p2 AS
function get_field_value return varchar2
as
l_rec p1.typ_rec;
begin
return p1.get_field_value(l_rec);
end;
end;
Package Body created.
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
CREATE OR REPLACE PACKAGE p1 AS
dummy CONSTANT varchar2(4) := 'XXXX';
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
alter package p1 compile
Package altered.
select object_name, object_type, status, timestamp from user_objects where object_name like 'P_'
OBJECT_NAME | OBJECT_TYPE | STATUS | TIMESTAMP | P1 | PACKAGE | VALID | 2024-05-09:07:59:31 | P1 | PACKAGE BODY | VALID | 2024-05-09:07:59:31 | P2 | PACKAGE | VALID | 2024-05-09:07:59:30 | P2 | PACKAGE BODY | VALID | 2024-05-09:07:59:30 |
---|
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different: ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
ERROR: values are different: 0000 != XXXX
alter package p2 compile
Package altered.
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
drop package p1
Package dropped.
drop package p2
Package dropped.
set serveroutput on
Unsupported Command
set feedback off
Unsupported Command
CREATE OR REPLACE PACKAGE p1 AS
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p1 AS
function get_field_value(p_rec typ_rec) return varchar2
AS
begin
return p_rec.field;
end;
end;
Package Body created.
CREATE OR REPLACE PACKAGE p2 AS
function get_field_value return varchar2;
end;
Package created.
CREATE OR REPLACE PACKAGE BODY p2 AS
function get_field_value return varchar2
as
l_rec p1.typ_rec;
begin
return p1.get_field_value(l_rec);
end;
end;
Package Body created.
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
CREATE OR REPLACE PACKAGE p1 AS
dummy CONSTANT varchar2(4) := 'XXXX';
field_default CONSTANT varchar2(4) := '0000';
TYPE typ_rec IS RECORD (
field varchar2(4) default field_default
);
function get_field_value(p_rec typ_rec) return varchar2;
end;
Package created.
alter package p1 compile
Package altered.
select object_name, object_type, status, timestamp from user_objects where object_name like 'P_'
OBJECT_NAME | OBJECT_TYPE | STATUS | TIMESTAMP | P1 | PACKAGE | VALID | 2024-05-09:08:00:18 | P1 | PACKAGE BODY | VALID | 2024-05-09:08:00:18 | P2 | PACKAGE | VALID | 2024-05-09:08:00:17 | P2 | PACKAGE BODY | VALID | 2024-05-09:08:00:17 |
---|
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different: ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
ERROR: values are different: 0000 != XXXX
alter package p2 compile
Package altered.
DECLARE
l_rec p1.typ_rec;
l_value_1 varchar2(20);
l_value_2 varchar2(20);
BEGIN
l_value_1 := p1.get_field_value(l_rec);
l_value_2 := p2.get_field_value();
if l_value_1 = l_value_2
then
dbms_output.put_line('GOOD: values are the same: ' || l_value_1);
else
dbms_output.put_line('ERROR: values are different! ' || l_value_1 || ' != ' || l_value_2);
end if;
END;
Statement processed.
GOOD: values are the same: 0000
drop package p1
Package dropped.
drop package p2
Package dropped.