我需要使用TQuery从delphi创建存储过程到oracle中。 但是SQL.text很难理解。 有没有办法将直接文本存储为带引号的pl / SQL?
'create or replace '+
'function WholeTableRecovery(i_tablname IN varchar) return varchar '+
'as '+
是否可以使用资源文件
提前致谢
答案 0 :(得分:4)
由于您在标签中使用Delphi 2010(我这里没有Delphi 7进行测试),一种舒适的方法是将SQL存储在单独的文本文件中,同时将RC文件与包含资源编译器指令的RC文件一起存储。 />
RC文件将包含要与要包含要存储的SQL的文件名一起使用的资源的名称。示例的内容如下所示:
My_First_Speaking_ResourceName RCDATA "MyFirstSQL.sql"
My_Second_Speaking_ResourceName RCDATA "MySecondSQL.sql"
如果您包含包含RC的资源并产生RES,则无需直接调用BRCC32:
{$R 'MySQLResources.res' 'resources\MySQLResources.rc'}
为方便起见,您可以包装TResourceStream的用法,示例中显示的方式将使用Strings,您可能也直接使用流,如TLama MyQuery.SQL.LoadFromStream(rs);
implementation
{$R *.dfm}
{$R 'MySQLResources.res' 'resources\MySQLResources.rc'}
function LoadSqlResource(resourceName: string): string;
var
rs: TResourceStream;
sl: TStringList;
s : string;
begin
sl := TStringList.Create;
try
rs := TResourceStream.Create(hinstance, resourceName, RT_RCDATA);
try
rs.Position := 0;
sl.LoadFromStream(rs);
Result := sl.Text;
finally
rs.Free;
end;
finally
sl.Free;
end;
end;
procedure CallOneSql(Q:TADOQuery;ResourceName:String);
begin
Q.SQL.Text := LoadSqlResource('My_First_Speaking_ResourceName');
Q.ExecSQL;
end;
通过CallOneSql(MyQuery,'My_First_Speaking_ResourceName');
确保创建项目,而不仅仅是在对RC或SQL文件进行更改时进行编译。