Oracle R Enterprise Output Error: ORA-22621
11/29/2012 10:21:00 AM
Gönderen Mete Karar
Embedding R into Oracle database is a terrific idea. I believe anyone practicing data analysis and/or data mining should should take look at it. Although it's not a mature environment yet, some workarounds may be needed sometimes. Such as the one I come up against recently. To be clear beforehand, I'm running Oracle R Enterprise 1.1 on a 11.2.0.3 database. To illustrate the problem here is a demonstration:
Create a embedded function which returns a data frame/table with three columns which are type of integer, decimal and character respectively:
begin
sys.rqScriptCreate('Test',
'function(){
data.frame(a=1:10, b= seq(0.1, by=0.1),c=letters[1:10])
}');
end;
/
And call it within a query:
select a, b, c
from table(rqsys.rqEval(null,
'select 1 a, 1 b, cast(''c'' as varchar2(30)) c from dual',
'Test'));
Which will result with error:
ORA-22621: error transfering an object from the agent
ORA-06512: at "RQSYS.RQTABLEEVALIMPL", line 60
22621. 00000 - "error transfering an object from the agent"
*Cause: Any error returned from pickler routines on the agent side.
*Action: Contact Oracle Support.
The actual problem is the output format in fact. rq*Eval() functions takes output table definition as a parameter and it works smoothly with numeric columns, yet same cannot be said for character based columns. The workaround I came up with is taking advantage of good old XML. If you call the function with XML option instead of giving table format definition, you have the result set without an error. So keep on going this way and process the output which is CLOB containing XML:
select x.*
from table(rqsys.rqEval(null, 'XML', 'Test')) t,
xmltable('//root/frame_obj/ROW-frame_obj' passing xmltype.createxml(t.value)
columns a varchar2(1) path 'a/text()',
b varchar2(3) path 'b/text()',
c varchar2(1) path 'c/text()')(+) x;
Post a Comment