I am using version 11.4.1, Rad Studio 10.1 Berlin, compiling in 32 bit.
If TOraSession.Options.ConvertEOL = true, and a query selects multiline data, then 1 character per line is lost at the end of the data. I am using Oracle server version 19c and client 19c.
Sample project:
Code: Select all
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Ora,
OraCall,
orasmart;
var
Sess: TOraSession;
qry: TSmartQuery;
str: String;
begin
Sess := TOraSession.Create(nil);
Sess.username := 'me';
sess.password := 'secret';
sess.server := 'test';
sess.Options.ConvertEOL := False;
sess.Loginprompt := false;
sess.connected := true;
qry := TSmartQuery.Create(nil);
qry.Session := sess;
Writeln('sess.Options.ConvertEOL := False;');
Writeln('');
Writeln('select listagg(''987543210'', chr(10)) within group (order by null) as data');
Writeln('from dual');
Writeln('connect by level <= 5;');
Writeln('============================================================================');
qry.sql.add('select listagg(''987543210'', chr(10)) within group (order by null) as data');
qry.sql.add('from dual');
qry.sql.add('connect by level <= 5');
qry.execute;
Writeln(qry.fieldByname('DATA').asString);
Writeln('');
qry.Close;
sess.Connected := False;
sess.Options.ConvertEOL := True;
sess.Connected := True;
Writeln('sess.Options.ConvertEOL := True;');
Writeln('');
Writeln('select listagg(''987543210'', chr(10)) within group (order by null) as data');
Writeln('from dual');
Writeln('connect by level <= 5;');
Writeln('============================================================================');
qry.sql.clear;
qry.sql.add('select listagg(''987543210'', chr(10)) within group (order by null) as data');
qry.sql.add('from dual');
qry.sql.add('connect by level <= 5');
qry.execute;
Writeln(qry.fieldByname('DATA').asString);
Writeln('');
Write('hit any key to end');
Readln(str);
qry.free;
sess.free;
end.
Code: Select all
sess.Options.ConvertEOL := False;
select listagg('987543210', chr(10)) within group (order by null) as data
from dual
connect by level <= 5;
============================================================================
987543210
987543210
987543210
987543210
987543210
sess.Options.ConvertEOL := True;
select listagg('987543210', chr(10)) within group (order by null) as data
from dual
connect by level <= 5;
============================================================================
987543210
987543210
987543210
987543210
98754
hit any key to end