執行多sql檔案的批處理(oracle)

2021-06-08 17:00:19 字數 3365 閱讀 9695

專案中有多個資料庫多處改變,另外有大量資料匯入,為了方便公升級從網上查詢總結的批處理檔案(此檔案呼叫本地sqlplus執行)。

此處只是簡單的使用方法,研究不深只為了自己學習記錄。

@echo ***************************************

@echo 資料庫公升級

@echo ***************************************

setlocal enabledelayedexpansion

title 資料庫公升級

set usr=swater

set pwd=swater

set tns=orcl

set result=dbinfo.txt

date /t > %result%

time /t >> %result%

@echo. >> %result%

tnsping %tns% > nul

if errorlevel 1 (echo %tns% tnsping failing. && echo error:tnsping failing. >> %result%) else (

sqlplus -s %usr%/%pwd%@%tns% @"%~dp0define.sql" >> %result%

sqlplus -s %usr%/%pwd%@%tns% @"%~dp0admin.sql" >> %result%

sqlplus -s %usr%/%pwd%@%tns% @"%~dp0image.sql" >> %result%

sqlplus -s %usr%/%pwd%@%tns% @"%~dp0plan.sql" >> %result%

sqlplus -s %usr%/%pwd%@%tns% @"%~dp0hv.sql" >> %result%

echo. >> %result%

)if exist sqlnet.log del sqlnet.log

@echo ***************************************

@echo 資料庫匯入資料執行完成

@echo ***************************************

pause

notepad %result%

exit

set usr=swater //客戶端訪問使用者名稱

set pwd=swater //密碼

set tns=orcl //訪問資料庫的名稱(tns,此處在product\11.2.0\client_1\network\admin 中tnsnames.ora中找)

set result=dbinfo.txt //輸出文件的命名

tnsping %tns% > nul //測試tns是否ping通
%~dp0 //同目錄資料夾得路徑
notepad %result% //調出記錄

以下為sql的注意事項:

1.bat檔案呼叫的sql檔案中如果有儲存過程一定要加 /

2.插入多條資料時commit ,然後在每個sql檔案的最後寫quit,這樣才會結束彈出notepad。

為表增加字段
declare  cnt number; 

begin

---查詢要建立的表列是否存在

select count(*) into cnt from cols where table_name=upper('st_bridge') and column_name=upper('version');

if cnt>0 then

dbms_output.put_line('字段已經存在不能新增');

else

--dbms_output.put_line('欄位不存在');

execute immediate 'alter table st_bridge add version number';

end if;

end;

/

判斷自增序列是否被建立

declare sequecesid number;

begin

select count(*) into sequecesid from user_sequences where sequence_name='s_st_bridge_id';

if sequecesid>0 then

dbms_output.put_line('序列名稱已經建立');

execute immediate 'drop sequence s_st_bridge_id';

else

dbms_output.put_line('序列名稱不存在');

execute immediate 'create sequence s_st_bridge_id

minvalue 1

maxvalue 999999999

start with 1

increment by 1

cache 20';

--建立自增序列

end if;

end;

/建立觸發器

declare triggerid number;

begin

select count(*) into triggerid from user_triggers where table_name='st_bridge';

if triggerid>0 then

dbms_output.put_line('已經存在');

execute immediate 'drop trigger trig_st_bridge_id';

else

--dbms_output.put_line(sequecesid);

execute immediate 'create or replace trigger trig_st_bridge_id

before insert on st_bridge for each row

declare

next_id number

select s_st_bridge_id.nextval into next_id from dual

:new.id:=next_id';

end if;

end;

/

在批處理中執行 sql檔案

有時候我們可能想把新增登入,分配資料庫角色,恢復資料庫寫在乙個.sql檔案中,然後開啟sql 的管理客戶端,開啟sql檔案,f5一下。但是也可以寫乙個批處理,來幫你執行這個sql檔案,就不用你開啟sql的管理客戶端了,畢竟開啟一次還是比較慢的,只為這一點事情,好像省略比較好。echo off tit...

在批處理中執行 sql檔案

有時候我們可能想把新增登入,分配資料庫角色,恢復資料庫寫在乙個.sql檔案中,然後開啟sql 的管理客戶端,開啟sql檔案,f5一下。但是也可以寫乙個批處理,來幫你執行這個sql檔案,就不用你開啟sql的管理客戶端了,畢竟開啟一次還是比較慢的,只為這一點事情,好像省略比較好。echo off tit...

sqlserver批處理檔案sql執行

本地伺服器執行 cd c program files microsoft sql server mssql13.mssqlserver mssql binn sqlserver安裝目錄 e sqlcmd d peis usa p password ie sql 要執行的處理sql檔案 oe txt ...