專案中有多個資料庫多處改變,另外有大量資料匯入,為了方便公升級從網上查詢總結的批處理檔案(此檔案呼叫本地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 ...