Как выяснить номер версии Oracle?

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;

Взято с Delphi Knowledge Base: http://www.baltsoft.com/

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...