gpt4 book ai didi

delphi - 如何使用 FireDAC 提取存储过程 DDL

转载 作者:行者123 更新时间:2023-12-01 21:15:58 25 4
gpt4 key购买 nike

我正在从 FIBPlus 更改为 FireDAC,我需要的大部分功能都在 FireDAC 中,我只是在努力寻找相当于 TpFIBDBSchemaExtract 和 TpFIBScripter 的 FIBPlus,用于将存储过程提取为 DDL。

FireDAC有办法从数据库中提取存储过程DDL吗?

例如,看起来像:

SET TERM ^ ;

CREATE PROCEDURE MY_PROC RETURNS (aParam INTEGER) AS
BEGIN
aParam = 10;
END^

最佳答案

FireDAC 不支持(统一)获取存储过程的 DDL 定义(目前)。因此,您需要从 RDB$PROCEDURES 获取该 DDL。表,您自己的 RDB$PROCEDURE_SOURCE 列。例如(虽然不是理想地设计为连接对象助手):

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 DBMS 时):

procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
S := FDConnection1.GetStoredProcCode('MyProcedure');
...
end;

关于delphi - 如何使用 FireDAC 提取存储过程 DDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51988831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com