Извлечение DDL Хранимых Процедур с Использованием FireDAC
В процессе перехода с компонентов FIBPlus на FireDAC для работы с базами данных, важно понимать, какие возможности предоставляет новый инструментарий. В частности, если вам необходимо извлекать определения хранимых процедур в виде DDL (Data Definition Language), следует знать, что FireDAC не предоставляет унифицированного метода для этой задачи, в отличие от TpFIBDBSchemaExtract и TpFIBScripter в FIBPlus.
Решение проблемы
Для извлечения DDL хранимых процедур в FireDAC, необходимо самостоятельно обратиться к таблице __RDB$PROCEDURES__ и столбцу __RDB$PROCEDURE_SOURCE__, которые содержат нужную информацию. Ниже приведен пример кода на Object Pascal, который демонстрирует, как можно реализовать такой функционал:
uses
FireDAC.Stan.Util;
type
TFDConnectionHelper = class helper for TFDConnection
public
function GetStoredProcCode(const AName: string): string;
end;
implementation
{ TFDConnectionHelper }
function TFDConnectionHelper.GetStoredProcCode(const AName: string): string;
var
Table: TFDDatSTable;
Command: IFDPhysCommand;
begin
CheckActive;
if RDBMSKind <> TFDRDBMSKinds.Firebird then
raise ENotSupportedException.Create('This feature is supported only for Firebird');
Result := '';
ConnectionIntf.CreateCommand(Command);
Command.CommandText := 'SELECT RDB$PROCEDURE_SOURCE FROM RDB$PROCEDURES WHERE RDB$PROCEDURE_NAME = :Name';
Command.Params[0].DataType := ftString;
Command.Params[0].Size := 31;
Command.Params[0].AsString := UpperCase(AName);
Table := TFDDatSTable.Create;
try
Command.Define(Table);
Command.Open;
Command.Fetch(Table);
if Table.Rows.Count > 0 then
Result := Table.Rows[0].GetData(0);
finally
FDFree(Table);
end;
end;
Использование
Для использования данного метода необходимо, чтобы ваше приложение было подключено к базе данных Firebird. Пример использования функции GetStoredProcCode:
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
S := FDConnection1.GetStoredProcCode('MyProcedure');
// Здесь можно использовать полученный код DDL
end;
Важные замечания
Стоит отметить, что столбец __RDB$PROCEDURE_SOURCE__ может быть очищен разработчиком базы данных после создания хранимой процедуры. Это означает, что для поддержания актуальности DDL, вам может потребоваться регулярно обновлять его из базы данных.
Заключение
Переход с FIBPlus на FireDAC требует понимания того, как выполняются различные операции, которые ранее выполнялись с помощью специализированных компонентов FIBPlus. В случае с извлечением DDL хранимых процедур, FireDAC не предоставляет готовое решение, но позволяет реализовать необходимый функционал, используя стандартные механизмы работы с базами данных.
Необходимо извлечь определения хранимых процедур в виде DDL с использованием FireDAC, поскольку в этом инструментарии нет прямого аналога TpFIBDBSchemaExtract и TpFIBScripter из FIBPlus.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS