ora2pg
ora2pg copied to clipboard
User-Defined Aggregate Migrate
Hi Darold, Migrated Oracle user-defined aggregate function, but it doesn't work,the obtained file content is empty.
Oracle user-defined aggregate code as below: Oracle Types:
create or replace type list_agg as object
(
total varchar2(4000),
static function ODCIAggregateInitialize(sctx IN OUT list_agg)
return number,
member function ODCIAggregateIterate(self IN OUT list_agg,
value IN varchar2) return number,
member function ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number)
return number,
member function ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg) return number
)
Types bodies:
create or replace type body list_agg is
static function ODCIAggregateInitialize(sctx IN OUT list_agg) return number is
begin
sctx := list_agg(null);
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT list_agg,
value IN varchar2) return number is
begin
self.total := self.total || value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number) return number is
begin
returnValue := substr(self.total, 2);
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg) return number is
begin
self.total := self.total || ctx2.total;
return ODCIConst.Success;
end;
end;
Oracle Function:
CREATE OR REPLACE FUNCTION ColumnToRow(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING list_agg;
ora2pg command:
ora2pg -d --no_header -o test.sql -t FUNCTION -a COLUMNTOROW -n FFDEV -s "dbi:Oracle:host=127.0.0.1;sid=xyorcl;port=1521" -u test -w test
Best regards
Thanks for the report, this is not supported yet. It require some major enhancement to the TYPE export and your code sample will be helpful, let's keep the issue open as a remainder.