Retrieve the system time from a pl/sql block
Here is a simple block which retrieves the Oracle systimestamp into an ST timestamp:
"Log on and get the connection"
(AbtDatabaseConnectionSpec forDbmClass: AbtOracle10DatabaseManager databaseName: 'orcl') connect.
connection := AbtDbmSystem activeDatabaseConnection
flushCache;
autoCommit: true;
commitUnitOfWork;
yourself.
"PL/SQL Block"
wStream := WriteStream on: String new.
wStream
nextPutAll: 'DECLARE '; cr;
nextPutAll: 'ts TIMESTAMP; '; cr;
nextPutAll: 'BEGIN '; cr;
nextPutAll: 'ts := SYSTIMESTAMP; '; cr;
nextPutAll: ':outTS := ts; '; cr;
nextPutAll: 'END; '.
"Param Marker name in the PL/SQL block."
timeStampName := 'outTS'.
"Setup the data field"
inOutParams := AbtCompoundType new
addField: (AbtOracle10TimeStampField new
name: timeStampName).
"Add a timestamp to hold the value returned"
aDict := Dictionary new.
aDict
at: timeStampName
put: (AbtTimestamp now
date: Date today;
yourself).
"Create the anonymous block spec"
anonymousBlockSpec := AbtAnonymousBlockSpec new
plSqlString: wStream contents;
useSqlCall: true;
parameters: inOutParams.
"Execute the block"
resultSet := connection invokeAnonymousBlockSpec: anonymousBlockSpec withInputDictionary: aDict.
resultSet
The variable ‘aDict’ has the timestamp:
Last modified date: 06/01/2018