Hi, I have a question regarding user defined types.
Here is an example with a standard Oracle defined type:
create table test (location SDO_GEOMETRY)
insert into test values(SDO_GEOMETRY(1,6, SDO_POINT_TYPE(10,15,30), SDO_ELEM_INFO_ARRAY(350), SDO_ORDINATE_ARRAY(2000)))
commit
select location from test
dbForge return this result:
MDSYS.SDO_GEOMETRY(1, 6, MDSYS.SDO_POINT_TYPE(10, 15, 30), MDSYS.SDO_ELEM_INFO_ARRAY(350), MDSYS.SDO_ORDINATE_ARRAY(2000))
SQLPLUS returns this result:
SDO_GEOMETRY(1, 6, SDO_POINT_TYPE(10, 15, 30), SDO_ELEM_INFO_ARRAY(350), SDO_ORDINATE_ARRAY(2000))
SQL Developer returns this result:
MDSYS.SDO_GEOMETRY(1,6,MDSYS.SDO_POINT_TYPE(10,15,30),MDSYS.SDO_ELEM_INFO_ARRAY(350),MDSYS.SDO_ORDINATE_ARRAY(2000))
TOraQuery returns this result (.AsString)
(1; 6; (10; 15; 30) ; (350; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ) ; (2000; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ) )
Is there another way of getting the result value other that .AsString? I would like to be able to get the value more like the other samples (other than TOraQuery) do.
FieldType is fkData and DataType is ftADT
Reg,
Arni Thor
Working with user defined types
Re: Working with user defined types
hello,
Thank you for the information, we will review the possibility to change data display from such fields when using the AsString method in one of the next versions.
Thank you for the information, we will review the possibility to change data display from such fields when using the AsString method in one of the next versions.
Re: Working with user defined types
Hello,
For the time being, you can generate a string yourself by looking over all elements of the SDO_GEOMETRY type, e.g.:
For the time being, you can generate a string yourself by looking over all elements of the SDO_GEOMETRY type, e.g.:
Code: Select all
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,
Ora,
OraObjects;
var
OraSession: TOraSession;
OraQuery: TOraQuery;
OraObject: TOraObject;
OraArray: TOraArray;
i: integer;
s: String;
begin
OraSession := TOraSession.Create(nil);
OraQuery := TOraQuery.Create(nil);
try
OraSession.ConnectString := 'scott/tiger@orcl1020';
OraSession.Connect;
OraQuery.Session := OraSession;
OraQuery.SQL.Text := 'select * from dados';
OraQuery.ObjectView := true;
OraQuery.Open;
OraObject := TOraObject.Create(TOraType.Create(OraSession.OCISvcCtx, 'MDSYS.SDO_GEOMETRY'));
OraObject.Assign(OraQuery.GetObject('Location'));
s := 'SDO_GEOMETRY(' + IntToStr(OraObject.AttrAsInteger['SDO_GTYPE']) + ',';
s := s + IntToStr(OraObject.AttrAsInteger['SDO_SRID']) + ',';
s := s + 'SDO_POINT_TYPE(' + IntToStr(OraObject.AttrAsObject['SDO_POINT'].AttrAsInteger['X']) + ',';
s := s + 'SDO_POINT_TYPE(' + IntToStr(OraObject.AttrAsObject['SDO_POINT'].AttrAsInteger['Y']) + ',';
s := s + 'SDO_POINT_TYPE(' + IntToStr(OraObject.AttrAsObject['SDO_POINT'].AttrAsInteger['Z']) + '),';
OraArray := TOraArray.Create(TOraType.Create(OraSession.OCISvcCtx, 'MDSYS.SDO_ELEM_INFO_ARRAY'));
OraArray := OraObject.AttrAsArray['SDO_ELEM_INFO'];
s := s + 'SDO_ELEM_INFO_ARRAY(';
for i := 0 to OraArray.Size - 1 do
if i = OraArray.Size - 1 then
s := s + IntToStr(OraArray.ItemAsInteger[0]) + ')'
else
s := s + IntToStr(OraArray.ItemAsInteger[0]) + ',';
s := s + ',SDO_ORDINATE_ARRAY(';
OraArray := TOraArray.Create(TOraType.Create(OraSession.OCISvcCtx, 'MDSYS.SDO_ORDINATE_ARRAY'));
OraArray := OraObject.AttrAsArray['SDO_ORDINATES'];
for i := 0 to OraArray.Size - 1 do
if i = OraArray.Size - 1 then
s := s + IntToStr(OraArray.ItemAsInteger[0]) + ')'
else
s := s + IntToStr(OraArray.ItemAsInteger[0]) + ',';
s := s + ')';
Writeln(s);
finally
OraArray.free;
OraQuery.Free;
OraSession.Free;
readln;
end;
end.