📄 extproc.dpr
字号:
library ExtProc;
uses
SysUtils,
Classes,
DB, Ora, OraCall, OraError, OraClasses,
Data in 'Data.pas' {dmData: TDataModule};
{$R *.res}
procedure add_file(Context: pOCIExtProcContext; Id: pOCINumber;
FileName: PChar; FileDate: pOCIDateTime; FileText: pOCILobLocator); cdecl;
var
hEnv: pOCIEnv;
hSvcCtx: pOCISvcCtx;
hError: pOCIError;
dmData: TdmData;
OraLob: TOraLob;
begin
// Load oci.dll and link OCI functions
//OracleHomeName := 'OraHome92';
InitOCI;
try
// get OCI service context
Check(OCIExtProcGetEnv(Context, hEnv, hSvcCtx, hError));
dmData := TdmData.Create(nil);
try
// set sevice context handle in OraSession
dmData.OraSession.OCISvcCtx := hSvcCtx;
with dmData.OraSQL do begin
ParamByName('ID').DataType := TFieldType(ftNumber);
ParamByName('ID').AsNumber.OCINumberPtr := Id;
ParamByName('FILE_NAME').AsString := FileName;
ParamByName('FILE_DATE').DataType := TFieldType(ftTimeStamp);
ParamByName('FILE_DATE').AsTimeStamp.OCIDateTime := FileDate;
Execute;
OraLob := TOraLob.Create(hSvcCtx);
try
OraLob.OCILobLocator := FileText;
OraLob.ReadLob;
OraLob.SaveToFile(FileName);
finally
OraLob.Free;
end;
end;
finally
dmData.Free;
end;
except
on e: EOraError do
OCIExtProcRaiseExcpWithMsg(Context, e.ErrorCode, PChar(e.Message), Length(e.Message));
on e: Exception do
OCIExtProcRaiseExcpWithMsg(Context, 20000, PChar(e.Message), Length(e.Message));
end;
end;
exports
add_file;
begin
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -