это мой пример кода для выполнения сценария sql с командной строкой oracle sqlplus
1. образец кода
[Dirs]
; Create folders at user side
Name: {app}\ScriptLog;
[Code]
///////////////////////////////////////////////////////////
//// Modify Sql function
//// TagName: the script line you want to modify tag name,
//// OldString: the old string,
//// NewString: the new string,
//// StringArr: the script strings array
///////////////////////////////////////////////////////////
function ModifySql(var TagStr, OldStr, NewStr: String; const StringArr: array of String): Boolean;
var
batPath: String;
tmpStr: String;
ResultCode: Integer;
i: Integer;
begin
result := false;
for i:= 0 to GetArrayLength(StringArr)-1 do
// if TagStr and OldStr are in the same line
if ( (StringArr[i] <> '') and (Pos(TagStr, StringArr[i]) > 0) and (Pos(OldStr, StringArr[i]) > 0) ) then
//replace OldStr with NewStr
StringChange(StringArr[i], OldStr, NewStr);
end;
///////////////////////////////////////////////////////////
//// Search ORA- Error function
//// the script exec result, for example : Error or ORA-xxxxx
///////////////////////////////////////////////////////////
function Check_Exec_Script_Result(var ErrStr, LogFile: String): Boolean;
var
LogFileLines: TArrayOfString;
ResultCode: Integer;
i: Integer;
begin
//assign sql file
//load strings and store to SqlFileLines
LoadStringsFromFile(LogFile, LogFileLines);
result := false;
for i:= 0 to GetArrayLength(LogFileLines)-1 do
// if TagStr and OldStr are in the same line
if ( (LogFileLines[i] <> '') and (Pos(ErrStr, LogFileLines[i]) > 0) ) then
MsgBox('Err' + LogFileLines[i] , mbError, MB_OK);
end;
///////////////////////////////////////////////////////////
//// execute Script with Sqlplus
///////////////////////////////////////////////////////////
procedure Exec_Script_Sqlplus(var dbTns, dbUser, dbPwd, scriptPath, batFileName: String);
var
batPath: String;
tmpStr: String;
ResultCode: Integer;
LogFileName: String;
ErrStr: String;
begin
// generate bat file
batPath := ExpandConstant('{tmp}\' + batFileName + '.bat');
tmpStr := 'cd \' + ''#13''#10;
SaveStringToFile(batPath, tmpStr, False);
//tmpStr := 'quit | sqlplus ' + dbUser + '/' + dbPwd + '@' + dbTns + ' @' + scriptPath + ''#13''#10;;
tmpStr := 'echo quit | sqlplus ' + dbUser + '/' + dbPwd + '@' + dbTns + ' @' +'"'+ scriptPath +'"'+ ''#13''#10;
SaveStringToFile(batPath, tmpStr, True);
// set log file path
LogFileName := ExpandConstant('E:\123\' + batFileName + '.txt');
//MsgBox(batPath, mbError, MB_OK);
if Exec(batPath, ' > "' + LogFileName + '"', '', 1, ewWaitUntilTerminated, ResultCode) then
begin
// handle success if necessary; ResultCode contains the exit code
if (ResultCode = 0) then begin
ErrStr := 'ORA';
Check_Exec_Script_Result(ErrStr, LogFileName);
// open ScriptLog file
ShellExec('', ExpandConstant(LogFileName),'', '', SW_SHOW, ewNoWait, ErrorCode)
//MsgBox('OK', mbError, MB_OK);
//result := true;
end;
end
else begin
MsgBox('Exec:' + scriptPath + 'fail,please check parameters setting', mbError, MB_OK);
//handle failure if necessary; ResultCode contains the error code
end;
end;
///////////////////////////////////////////////////////////
//// 1. Set Sql Script Parameters ,ex: DB TNS,Account,PWD
//// 2. Call function ModifySql, to modify Sql Script
//// 3. Call function Exec_Script_Sqlplus, to exec Sql Script with sqlplus
///////////////////////////////////////////////////////////
procedure SetSql_ExecSqlScript();
var
SqlFile: String;
OldString: String;
NewString: String;
TagName: String;
batFileName: String;
SqlFileLines: TArrayOfString;
LocalInfoPath: String;
LocalInfoLines: TArrayOfString;
LocalInfoStr: String;
i: Integer;
begin
//assign sql file
//========================start of 1_Sample_system.sql========================
SqlFile := WizardDirValue() + '\SQL\1_Sample_system.sql';
//create bat file
batFileName := '1_Sample_system';
//load strings and store to SqlFileLines
LoadStringsFromFile(SqlFile, SqlFileLines);
//set modify parameters
TagName := 'CREATE USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'GRANT CREATE';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'GRANT CONNECT';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'ALTER USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'IDENTIFIED';
OldString := '1234abcd';
NewString := DBAppPwd;
ModifySql(TagName, OldString, NewString, SqlFileLines);
//save modified strings to file
SaveStringsToFile(SqlFile, SqlFileLines, False);
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBSystemTNS, DBSystemUser, DBSystemPwd, SqlFile , batFileName);
//========================end of 1_Sample_system.sql========================
//========================start of 2_Sample_create_schema.sql========================
SqlFile := WizardDirValue() + '\SQL\2_Sample_create_schema.sql';
//create bat file
batFileName := '2_Sample_create_schema';
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBAppTNS, DBAppUser, DBAppPwd, SqlFile , batFileName);
//========================end of 2_Sample_create_schema.sql========================
//========================start of 3_Sample_insert_data.sql========================
SqlFile := WizardDirValue() + '\SQL\3_Sample_insert_data.sql';
//create bat file
batFileName := '3_Sample_insert_data';
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBAppTNS, DBAppUser, DBAppPwd, SqlFile , batFileName);
//========================end of 3_Sample_insert_data.sql========================
//========================start of 4_Sample_drop_schema.sql========================
SqlFile := WizardDirValue() + '\SQL\4_Sample_drop_schema.sql';
//create bat file
batFileName := '4_Sample_drop_schema';
//load strings form file
LoadStringsFromFile(SqlFile, SqlFileLines);
//set modify parameters
TagName := 'DROP USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
//save modified strings to file
SaveStringsToFile(SqlFile, SqlFileLines, False);
//Exec Script with Sqlplus
//Exec_Script_Sqlplus(DBSystemTNS, DBSystemUser, DBSystemPwd, SqlFile , batFileName);
//========================end of 4_Sample_drop_schema.sql========================
end;