Andrey Maximenko. Ukraine
Member²
SQL:
CREATE OR REPLACE PROCEDURE test_plsql_string(p_text OUT VARCHAR2)
IS
BEGIN
p_text := lpad(' ', 32000, '1234567890absdefgh'||chr(10));
END;
Code:
var Pkg : TOraclePackage;
a : array of variant;
begin
Pkg := TOraclePackage.Create(OraSes);
Pkg.Session := OraSes;
Pkg.ParameterMode := pmNamed;
a := vararrayof(['p_text', parString]);
pkg.CallProcedure('test_plsql_string', a);
ORA-06512: at "SYS.TEST_PLSQL_STRING", line 4
ORA-06512: at line 2
======================================================
Propose to add a new parameter:
Code:
1.
var // Parameter types must be otXXXX constant cast to varParType in initialization
...
parPlSqlString: Variant;
2.
initialization
begin
parPlSqlString := VarAsType(otPLSQLString, varParType);
3.
procedure TOraclePackage.SetParameters(const Parameters: array of Variant);
...
case VarType(v) and VarTypeMask of
varParType: begin // Bytes are used to set output parameter types
Parameter.DataType := v;
if not (Parameter.DataType in [otInteger, otString, otplSqlString, otFloat, otDate, otBoolean]) then
...
Then the following code to work out correctly:
Code:
a := vararrayof(['p_text', parPlSqlString]);
pkg.CallProcedure('test_plsql_string', a);
ShowMessage(pkg.GetParameter('p_text'));