當前位置:首頁 » 存儲配置 » shell腳本執行oracle存儲過程

shell腳本執行oracle存儲過程

發布時間: 2023-08-22 07:27:01

A. shell下調用oracle存儲過程,怎麼將存儲過程的輸出參數傳遞給shell中的變數啊

那一就要寫一個shell
腳本
echo
-ne
"\e[40;33;lm
請如數
參數
:\e[0m"
read
X
su
-
oracle
sqlplus
用戶名/
密碼
start
存儲過程名
參數

B. 如何定製oracle用戶下的shell腳本自動運行

多樣性應該是linux最好的特性之一,用戶可以不斷嘗試各種喜歡和新鮮玩法與花樣,並從中找出最適合自己的應用

無論你是Linux新人還是老鳥,層出不窮的應用和桌面環境可能都會讓我們應接不暇,特別是嘗試不同的Linux桌面環境,可以說是一項非常耗時和累人的任務

在此,咱系統極客對目前應用最為廣泛的7款Linux桌面環境進行盤點,並對其優缺點進行比較,希望對各位選擇或者進行各種折騰有所幫助

聲明:我們只是對目前應用最為廣泛的7款Linux桌面環境進行盤點小節,排名無分先後

KDEKDE絕非只是一個桌面環境,實際上是各種應用程序與Linux桌面的一個集合,桌面環境本身只作為該套應用環境的一個子集

目前最新的KDE環境名叫Plasma,它又分為PlasmaDesktop和PlasmaNetbook兩個版本,KDE可以說是目前定製性最強,最為靈活的Linux桌面環境之一

其它桌面環境可能需要使用額外的工具才能進行自定義或調整,而KDE將這一切都集成進了系統設置當中,用戶不需要使用任何第三方工具即可以對桌面進行個性化訂制,如下載桌面小工具、壁紙和主題等

KDE還對常用的基本應用程序進行了集成,並對未使用KDE開發平台構建的應用進行兼容,KDE集成的應用非常豐富,完全能夠滿足普通用戶的日常應用,而無需安裝其它替代應用

無論你只是想要一個開箱即用的Linux桌面環境還是要對桌面進行全面的個性化訂制,KDE都是一個非常不錯的選擇

目前採用KDE作為默認桌面環境的Linux發行版主要有openSUSE和Kubuntu

KDE優點:功能十分豐富強大高度可定製性和靈活性范圍廣泛的軟體兼容性KDE缺點:稍重的資源佔用某些組件使用起來似乎過於復雜MATEMATE桌面環境基於目前無人維護的GNOME2,MATE最初就是為對GNOME3失望的用戶而開發

ForkGNOME2的代碼進行氏清納開發並不意味著就使用過時的技術,MATE將繼續使用現代技術進行改善

MATE桌面環境採用了現代而又不失傳統的桌面體驗,它支持面板系統、各種菜單、小程序、指示器和按鈕等,並可按用戶的需要進行布置

MATE自帶的基本應用都從GNOME2復制過來進行集成,它本身對資源的消耗非常小,能夠在不十分強勁的硬體平台上穩定工作

UbuntuMATE目前採用MATE作為自己的默認桌面環境

MATE優點:直觀和穩定的用戶體驗簡單、輕便高度可定製MATE缺點:介面看起來有些老了GNOMEGNOME是各Linux發行版採用最為廣泛、最流行的桌面環境之一,許多Linux發行版都使用GNOME作為默認桌面環境

它也有一些流行的分支,例如Cinnamon、Unity等等

GNOME以易於使用和定製為設計初衷,目前果最新的GNOME3具有非常現代和有吸引力的用戶界面,並能為觸摸設備提供更好的支持

GNOME幾乎包含了所有現代化桌面環境需要的所有功能,GNOME3比GNOME2的精典模式提供了更好的界面,儀錶板、全系統搜索和強大的應用程序都能夠直接輕松搞定用戶使用需求

不過桌面環境的定製調整需要使用gnome-tweak-tool工具來完成,在3

18版本中它還了文件管理器的一些有趣功能,例如對GoogleDrive進行了集成

目前使用GNOME作為默認桌面環境的Linux發行版主要有Debian、Fedora、openSUSE和UbuntuGNOME

GNOME優點:現代和觸摸友好的用戶界面能夠通過Shell擴展延伸功能可定製性強GNOME缺點:擴展管殲沒理不盡如人意CINNAMONCinnamon是GNOME3的一個分支,目前正作為LinuxMint的默認桌面環境

它最出名的便是與Windows相似的用戶界面,可以幫助Linux入門用戶輕松上手並減低不適應度

Cinnamon集成的各種基本應用都源於GNOME3,Cinnamon集成了面板、主題、小應用程序和各種自定義組件擴展,面板位置屏幕底部邊緣,配備了主菜單、啟用程序、打開窗口列表及系統托盤等

Cinnamon優點:時尚精緻的外觀熟悉的界面非常漂亮的定製Cinnamon缺點:偶爾出現的BugUNITYUnity也是基於GNOME桌面環境開發而來,配備有最核心的GNOME應用正基程序

Unity主要用於Canonical開發的Ubuntu桌面環境

Unity主攻方向為使用鍵盤、滑鼠、觸控板甚至觸摸屏的用戶提供一致一用戶體驗,為用戶提供了簡單的應用程序並集成了觸控友好的使用環境,還實現了一些新的想法和技術,如Lens和HUD等

盡管針對Unity桌面環境有大量的爭論,但它還是有非常大量的用戶,這都歸功於它是目前最流行Linux發行版Ubuntu的默認桌面環境

C. 怎樣實現每天自動執行oracle的存儲過程一次

用job
oracle定時器調用存儲過程
1.創建一個表,為了能清楚看到定時器的運行情況我們創建一個帶有日期欄位的表
Sql代碼
create table job_table(run_time date);

create table job_table(run_time date);
2.創建存儲過程
Sql代碼
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.創建job,並且指定為一分鍾執行一次
Sql代碼
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;

declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創建之後自動處於運行狀態,我們查詢job表,看看我們創建的job
Sql代碼
select job,broken,what,interval,t.* from user_jobs t;

select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

參數介紹
job job的唯一標識,自動生成的
broken 是否處於運行狀態,N;運行;Y:停止
what 存儲過程名稱
interval 定義的執行時間

補充:
描述 INTERVAL參數值
每天午夜12點 ''TRUNC(SYSDATE + 1)''
每天早上8點30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12點 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個月第一天的午夜12點 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個季度最後一天的晚上11點 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

D. linux下shell調用oracle存儲過程的問題

被鎖定的話,你可以是做不了的。等待也是沒用的啊,只要被鎖了,永遠你也做不了。除非解鎖了。應該先去檢查為何被鎖吧。 調用存儲過程,返回結果可以有,得看你的存儲過程怎麼寫了,可以在存儲過程里增加返回值的。

E. oracle存儲過程中調用一個shell腳本,用於進行一些操作,已經賦許可權,但是執行不了

shell的環境變數問題,你在shell內部的變數是獲取不到外部執行結果的。

F. java 執行shell語句 shell 執行oracle語句

怎樣在java代碼中調用執行shell腳本

//用法:Runtime.getRuntime.exec("命令");

Stringshpath="/test/test.sh";//程序路徑

Processprocess=null;

Stringmand1=「chmod777」+shpath;

try{

Runtime.getRuntime.exec(mand1).waitFor;

}catch(IOExceptione1){

e1.printStackTrace;

}catch(InterruptedExceptione){

e.printStackTrace;

}

Stringvar="201102";/參數

Stringmand2=「/bin/sh」+shpath+」」+var;

Runtime.getRuntime.exec(mand2).waitFor;

如何在java中執行shell腳本

// 用法:Runtime.getRuntime.exec("命令");

String shpath="/test/test.sh"; //程序路徑

Process process =null;

String mand1 = 「chmod 777 」 + shpath;

try {

Runtime.getRuntime.exec(mand1 ).waitFor;

} catch (IOException e1) {

e1.printStackTrace;

}catch (InterruptedException e) {

e.printStackTrace;

}

String var="201102"; /參數

String mand2 = 「/bin/sh 」 + shpath + 」 」 + var;

Runtime.getRuntime.exec(mand2).waitFor;

java怎麼調用shell腳本

Stringcmdstring="chmoda+xtest.sh";

Processproc=Runtime.getRuntime.exec(cmdstring);

proc.waitFor;//阻塞,直到上述命令執行完

cmdstring="bashtest.sh";//這里也可以是ksh等

proc=Runtime.getRuntime.exec(cmdstring);

//注意下面的操作

stringls_1;

BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(proc.getInputStream);

while祥配鉛((ls_1=bufferedReader.readLine)!=null);

bufferedReader.close;

proc.waitFor;

為什謹好么要有上面那段操作呢?

原因是:可執行程序的輸出可能會比較多,而運行窗口的輸出緩沖區有限,會造成waitFor一直阻塞。解決的辦法是,利用Java提供的Process類提供的getInputStream,getErrorStream方法讓Java虛擬機截獲被調用程序的標准輸出、錯誤輸出,在waitfor命令之前讀掉輸出緩沖區中的內容。

如何在java中執行shell腳本

在java中執行shell腳本 用賣碧法:Runtime.getRuntime.exec("命令");

String shpath="/test/test.sh"; //程序路徑

Process process =null;

String mand1 = 「chmod 777 」 + shpath;

try {

Runtime.getRuntime.exec(mand1 ).waitFor;

} catch (IOException e1) {

e1.printStackTrace;

}catch (InterruptedException e) {

e.printStackTrace;

}

String var="201102"; /參數

String mand2 = 「/bin/sh 」 + shpath + 」 」 + var;

Runtime.getRuntime.exec(mand2).waitFor;

標簽:作文經典 上一篇:一個人帶頭的成語 一個豬頭帶頭的成語 下一篇:描寫長城的語句 描寫長城美景的語句

怎麼通過java去調用並執行shell腳本以及問題總結

以下是我在公司項目中實際應用到的:

/**

*執行系統命令

*@time2016/10/17$17:05$

*/

{

protectedstaticLoggerlogger=LoggerFactory.getLogger(ShareDiskFileUtils.class);

;

;

static{

Stringosname=System.getProperty("os.name").toLowerCase;

isWindow=osname.contains("win");

isLinux=osname.contains("linux");

logger.info("系統環境:"+(isLinux?"Linux":"Window"));

}

/**

*執行命令

*/

(Stringmand)throwsIOException,InterruptedException{

logger.info("執行系統命令:"+mand);

Processprocess=Runtime.getRuntime.exec(getCmdArray(mand));

newStreamPrinter(process.getInputStream,logger).start;

newStreamPrinter(process.getErrorStream,logger).start;

process.waitFor;

returnprocess;

}

/**

*這個非常重要,如果你直接執行mand,會出現一些問題,如果參數中包含一些空格,",'之類的特殊字元,將會執行失敗,

*/

privatestaticString[]getCmdArray(Stringmand){

if(isWindow){

returnnewString[]{"cmd","/c",mand};

}

if(isLinux){

returnnewString[]{"/bin/sh","-c",mand};

}

returnnewString[]{"cmd","/c",mand};

}

}

怎麼通過java去調用並執行shell腳本以及問題總結

// 用法:Runtime.getRuntime.exec("命令");

String shpath="/test/test.sh"; //程序路徑

Process process =null;

String mand1 = 「chmod 777 」 + shpath;

try {

Runtime.getRuntime.exec(mand1 ).waitFor;

} catch (IOException e1) {

e1.printStackTrace;

}catch (InterruptedException e) {

e.printStackTrace;

}

String var="201102"; /參數

String mand2 = 「/bin/sh 」 + shpath + 」 」 + var;

Runtime.getRuntime.exec(mand2).waitFor;

java怎麼執行shell腳本

如果shell腳本和java程序運行在不同的伺服器上,可以使用遠程執行Linux命令執行包,使用ssh2協議連接遠程伺服器,並發送執行命令就行了,ganymed.ssh2相關mave配置如下,你可以自己網路搜索相關資料。

如果shell腳本和java程序在同一台伺服器上,

這里不得不提到java的process類了。

process這個類是一個抽象類,封裝了一個進程(你在調用linux的命令或者shell腳本就是為了執行一個在linux下執行的程序,所以應該使用process類)。

process類提供了執行從進程輸入,執行輸出到進程,等待進程完成,檢查進程的推出狀態,以及shut down掉進程。

.ganymed.ssh2

ganymed-ssh2-build

210

本地執行命令代碼如下:

Stringshpath="/test/test.sh";//程序路徑

Processprocess=null;

Stringmand1=「chmod777」+shpath;

process=Runtime.getRuntime.exec(mand1);

process.waitFor;

如何在java中執行shell腳本

1、最常用的方法:

Processp=Runtime.getRuntime.exec(SHELL_FILE_DIR+RUNNING_SHELL_FILE+

""+param1+""+param2+""+param3);

intrunnngStatus=p.waitFor;

2、通過ProcessBuilder進行調度,這種方法比較直觀,而且參數的設置也比較方便:

ProcessBuilderpb=newProcessBuilder("./"+RUNNING_SHELL_FILE,param1,

param2,param3);

pb.directory(newFile(SHELL_FILE_DIR));

intrunningStatus=0;

Strings=null;

try{

Processp=pb.start;

try{

runningStatus=p.waitFor;

}catch(InterruptedExceptione){

e.printStackTrace;

}

}catch(IOExceptione){

e.printStackTrace;

}

if(runningStatus!=0){

}

return;

參數說明:

RUNNING_SHELL_FILE:要運行的腳本

SHELL_FILE_DIR:要運行的腳本所在的目錄; 當然你也可以把要運行的腳本寫成全路徑。

runningStatus:運行狀態,0標識正常。 詳細可以看java文檔。

param1, param2, param3:可以在RUNNING_SHELL_FILE腳本中直接通過1,1,2,$3分別拿到的參數。

怎麼通過java去調用並執行shell腳本以及問題總結

對於第一個問題:java抓取,並且把結果打包。那麼比較直接的做法就是,java接收各種消息(db,metaq等等),然後藉助於jstorm集群進行調度和抓取。

最後把抓取的結果保存到一個文件中,並且通過調用shell打包, 回傳。 也許有同學會問,

為什麼不直接把java調用odps直接保存文件,答案是,我們的集群不是hz集群,直接上傳odps速度很有問題,因此先打包比較合適。(這里不糾結設計了,我們回到正題)

java調用shell的方法

通過ProcessBuilder進行調度

這種方法比較直觀,而且參數的設置也比較方便, 比如我在實踐中的代碼(我隱藏了部分業務代碼):

ProcessBuilderpb = new ProcessBuilder("./" + RUNNING_SHELL_FILE, param1,

param2, param3);

pb.directory(new File(SHELL_FILE_DIR));

int runningStatus = 0;

String s = null;

try {

Process p = pb.start;

try {

runningStatus = p.waitFor;

} catch (InterruptedException e) {

}

} catch (IOException e) {

}

if (runningStatus != 0) {

}

return;

這里有必要解釋一下幾個參數:

RUNNING_SHELL_FILE:要運行的腳本

SHELL_FILE_DIR:要運行的腳本所在的目錄; 當然你也可以把要運行的腳本寫成全路徑。

runningStatus:運行狀態,0標識正常。 詳細可以看java文檔。

param1, param2, param3:可以在RUNNING_SHELL_FILE腳本中直接通過1,2,$3分別拿到的參數。

直接通過系統Runtime執行shell

這個方法比較暴力,也比較常用, 代碼如下:

p = Runtime.getRuntime.exec(SHELL_FILE_DIR + RUNNING_SHELL_FILE + " "+param1+" "+param2+" "+param3);

p.waitFor;

我們發現,通過Runtime的方式並沒有builder那麼方便,特別是參數方面,必須自己加空格分開,因為exec會把整個字元串作為shell運行。

可能存在的問題以及解決方法

如果你覺得通過上面就能滿足你的需求,那麼可能是要碰壁了。你會遇到以下情況。

沒許可權運行

這個情況我們團隊的朱東方就遇到了, 在做DTS遷移的過程中,要執行包裡面的shell腳本, 解壓出來了之後,發現執行不了。 那麼就按照上面的方法授權吧

java進行一直等待shell返回

這個問題估計更加經常遇到。 原因是, shell腳本中有echo或者print輸出, 導致緩沖區被用完了! 為了避免這種情況, 一定要把緩沖區讀一下, 好處就是,可以對shell的具體運行狀態進行log出來。 比如上面我的例子中我會變成:

ProcessBuilderpb = new ProcessBuilder("./" + RUNNING_SHELL_FILE, keyword.trim,

taskId.toString, fileName);

pb.directory(new File(CASPERJS_FILE_DIR));

int runningStatus = 0;

String s = null;

try {

Process p = pb.start;

BufferedReaderstdInput = new BufferedReader(new InputStreamReader(p.getInputStream));

BufferedReaderstdError = new BufferedReader(new InputStreamReader(p.getErrorStream));

while ((s = stdInput.readLine) != null) {

LOG.error(s);

}

while ((s = stdError.readLine) != null) {

LOG.error(s);

}

try {

runningStatus = p.waitFor;

} catch (InterruptedException e) {

}

記得在start之後, waitFor()之前把緩沖區讀出來打log, 就可以看到你的shell為什麼會沒有按照預期運行。 這個還有一個好處是,可以讀shell裡面輸出的結果, 方便java代碼進一步操作。

也許你還會遇到這個問題,明明手工可以運行的命令,java調用的shell中某一些命令居然不能執行,報錯:命令不存在!

比如我在使用casperjs的時候,手工去執行shell明明是可以執行的,但是java調用的時候,發現總是出錯。

通過讀取緩沖區就能發現錯誤日誌了。 我發現即便自己把安裝的casperjs的bin已經加入了path中(/etc/profile,

各種bashrc中)還不夠。 比如:

exportNODE_HOME="/home/admin/node"

exportCASPERJS_HOME="/home/admin/casperjs"

exportPHANTOMJS_HOME="/home/admin/phantomjs"

exportPATH=$PATH:$JAVA_HOME/bin:/root/bin:$NODE_HOME/bin:$CASPERJS_HOME/bin:$PHANTOMJS_HOME/bin

原來是因為java在調用shell的時候,默認用的是系統的/bin/下的指令。特別是你用root許可權運行的時候。 這時候,你要在/bin下加軟鏈了。針對我上面的例子,就要在/bin下加軟鏈:

ln -s /home/admin/casperjs/bin/casperjscasperjs;

ln -s /home/admin/node/bin/nodenode;

ln -s /home/admin/phantomjs/bin/phantomjsphantomjs;

這樣,問題就可以解決了。

如果是通過java調用shell進行打包,那麼要注意路徑的問題了

因為shell裡面tar的壓縮和解壓可不能直接寫:

tar -zcf /home/admin/data/result.tar.gz /home/admin/data/result

直接給你報錯,因為tar的壓縮源必須到路徑下面, 因此可以寫成

tar -zcf /home/admin/data/result.tar.gz -C /home/admin/data/ result

如果我的shell是在jar包中怎麼辦?

答案是:解壓出來。再按照上面指示進行操作。(1)找到路徑

String jarPath = findClassJarPath(ClassLoaderUtil.class);

JarFiletopLevelJarFile = null;

try {

topLevelJarFile = new JarFile(jarPath);

Enumeration entries = topLevelJarFile.entries;

while (entries.hasMoreElements) {

JarEntryentry = entries.nextElement;

if (!entry.isDirectory entry.getName.endsWith(".sh")) {

對你的shell文件進行處理

}

}

對文件處理的方法就簡單了,直接touch一個臨時文件,然後把數據流寫入,代碼:

FileUtils.touch(tempjline);

tempjline.deleteOnExit;

FileOutputStreamfos = new FileOutputStream(tempjline);

IOUtils.(ClassLoaderUtil.class.getResourceAsStream(r), fos);

fos.close;

如何在java中執行shell腳本

首先你可以網路搜一下 java Process 類的用法,很多博文都有講解。

另外我補充一下我再使用過程中的一些點:

process = Runtime.getRuntime.exec(new String[]{"/bin/sh","-c",shellContext});

其中 shellContext 是shel腳本字元串

這句提交的時候,不少博文 exec中是直接提交shellContext。

但是對於一些場景不適用,取出來數據跟直接運行shell腳本有差異,可以改成我這種寫法。

標簽:作文經典 上一篇:一個人帶頭的成語 一個豬頭帶頭的成語 下一篇:描寫長城的語句 描寫長城美景的語句

G. shell腳本語言如何和oracle結合在一起使用

如果是通過shell腳本運行Oracle的sql語句,可以這樣寫shell腳本:
echo 「Oracle SQL Example"
sqlplus / as sysdba <<EOF
select * from scott.emp;
EOF
也就是把sql語句寫到shell腳本的EOF之間。

H. oracle 中用什麼命令執行一個帶參數的存儲過程

具體如下:

1、第一步,創建一個新的存儲過程,見下圖,轉到下面的步驟。

I. shell調用oracle存儲過程

#!/bin/sh
sqlplusabc/passwd<<EOF
setlinesize500;
setpagesize10000;
spooloutput.txt
calla1();
calla2();
calla3();
commit;
spooloff
quit;
EOF

大概就是這個方式。

需要修改一下oracle用戶密碼,如果存儲過程有參數還需要修改調用的地方。

熱點內容
wifi共享精靈源碼 發布:2025-02-01 02:40:15 瀏覽:970
java軟體怎麼安裝 發布:2025-02-01 02:40:09 瀏覽:546
河北稅務局電子密碼是什麼 發布:2025-02-01 02:40:07 瀏覽:832
檢查伺服器設置是什麼意思 發布:2025-02-01 02:31:26 瀏覽:182
神偷四第四章密碼是多少 發布:2025-02-01 02:07:29 瀏覽:12
qq登錄在哪個文件夾 發布:2025-02-01 01:57:59 瀏覽:624
如何加入安卓代理 發布:2025-02-01 01:51:40 瀏覽:2
我的世界手游伺服器刷鑽石教程 發布:2025-02-01 01:48:13 瀏覽:773
sqlifthen男女 發布:2025-02-01 01:44:59 瀏覽:690
幻靈和安卓哪個互通 發布:2025-02-01 01:43:33 瀏覽:648