2004. január 14., szerda
Function to Determine Oracle Version Number
Problem/Question/Abstract:
Function to Determine Oracle Version Number
Answer:
This function gets the connected Oracle version. It returns the version info in 3 OUT parameters.
VerNum : double eg. 7.23
VerStrShort : string eg. '7.2.3.0.0'
VerStrLong : string eg. 'Oracle7 Server Release 7.2.3.0.0 - Production Release'
I have tested it with Oracle 7.2 and 8.17. I assume it should work for the others (not too sure about Oracle 9 though). Any feedback and fixes for different versions would be appreciated.
The TQuery parameter that it recieves is a TQuery component that is connected to an open database connection.
Example :
var
VNum: double;
VShort: string;
VLong: string;
begin
GetOraVersion(MySql, VNum, VShort, VLong);
Label1.Caption := FloatToStr(VNum);
Label2.Caption := VShort;
Label3.Caption := VLong;
end;
procedure GetOraVersion(Query: TQuery;
out VerNum: double;
out VerStrShort: string;
out VerStrLong: string);
var
sTmp: string;
cKey: char;
i: integer;
begin
Query.SQL.Text := 'select banner from v$version ' +
'where banner like ' + QuotedStr('Oracle%');
Query.Open;
if not Query.Eof then
VerStrLong := Query.Fields[0].AsString
else
begin
// Don't know this version
VerStrLong := '?';
VerNum := 0.0;
VerStrShort := '?.?.?.?';
end;
Query.Close;
if VerStrLong <> '?' then
begin
cKey := VerStrLong[7]; // eg. Oracle7 or Oracle8i
VerStrLong[7] := 'X'; // Mask it out
sTmp := copy(VerStrLong, pos(cKey, VerStrLong), 1024);
VerStrShort := copy(sTmp, 1, pos(' ', sTmp) - 1);
sTmp := copy(VerStrShort, 1, pos('.', VerStrShort));
for i := length(sTmp) + 1 to length(VerStrShort) do
begin
if VerStrShort[i] <> '.' then
sTmp := sTmp + VerStrShort[i];
end;
VerNum := StrToFloat(sTmp);
VerStrLong[7] := cKey; // Put correct character back
end;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése