Re: Quick compare of PL/SQL records

  • From: Gints Plivna <gints.plivna@xxxxxxxxx>
  • To: Ranko Mosic <ranko.mosic@xxxxxxxxx>, Oracle-L <oracle-l@xxxxxxxxxxxxx>
  • Date: Fri, 29 Apr 2005 17:22:38 +0300

The only sensible built in comparison I could imagine with records
probably is equivalence i.e. as it is for object types (and also only
in SQL not PL/SQL as you can see below). But I cannot imagine how one
can define built in operators like > or < for records, because each
record could have very special meaning for his member fields.

17:10:07 gints@CMISMGR2> create type objtype as object (a number, b number)=
;
17:10:29   2  /

Type created.

Elapsed: 00:00:00.00
17:10:30 gints@CMISMGR2> create table objtab (a objtype);

Table created.

Elapsed: 00:00:00.00
17:10:58 gints@CMISMGR2> insert into objtab values (objtype(1, 1));

1 row created.

Elapsed: 00:00:00.00
17:11:19 gints@CMISMGR2> select * from objtab where a =3D a;

A(A, B)
---------------------------------------------------------------------------=
------------
OBJTYPE(1, 1)

1 row selected.

Elapsed: 00:00:00.00
17:11:38 gints@CMISMGR2> select * from objtab where a > a;
select * from objtab where a > a
                           *
ERROR at line 1:
ORA-22950: cannot ORDER objects without MAP or ORDER method


Elapsed: 00:00:00.00
17:11:44 gints@CMISMGR2> declare
17:11:51   2  var1 objtype;
17:11:57   3  var2 objtype;
17:12:03   4  begin
17:12:06   5    var1 :=3D objtype(1, 1);
17:12:17   6    var2 :=3D objtype(1, 1);
17:12:25   7    if var1 =3D var2 then=20
17:12:37   8      null;
17:12:40   9    else=20
17:12:43  10      null;
17:12:48  11    end if;
17:12:50  12  end;
17:12:52  13  /
  if var1 =3D var2 then
          *
ERROR at line 7:
ORA-06550: line 7, column 11:
PLS-00526: A MAP or ORDER function is required for comparing objects in PL/=
SQL.


Elapsed: 00:00:00.00
17:12:53 gints@CMISMGR2>=20



On 4/29/05, Ranko Mosic <ranko.mosic@xxxxxxxxx> wrote:
> Yes, I know what manual says - that's why I am posting the question here.
> The thing is, I need to compare about 100 types of records with dozens of
> attributes each. I would like to be able to avoid field level
> comparison and do it
> on record level.
> rm
>
--
//www.freelists.org/webpage/oracle-l

Other related posts: