1. 程式人生 > >使用PL/SQL執行OS命令

使用PL/SQL執行OS命令

pl/sql做為sql語言的一種補充語言,其優勢自然是在處理資料方面,但是隨著PL/SQL的不斷成長,尤其是和JAVA語言的聯絡越來越緊密,這使得PL/SQL也能完成一些高階應用操作了。

這裡方法也類似,只是需要傳入命令引數.

同樣首先建立java source

create or replace and compile java source named ExeSysCommand as
import java.io.*;
public class ExeSysCommand
{
  public static String ExeCmd(String args) {
        Runtime run = Runtime.getRuntime();
        Process process = null;
        try {
            process = run.exec(args); // 執行cmd命令
            return "OK!";
        } catch (Exception e) {
            return e.getMessage();
        }
        }
  public static void main(String[] args)
  {
    System.out.println("No command line arguments");
  }
}

其後建立函式呼叫該java soure
CREATE OR REPLACE FUNCTION ExeCmd(cmd STRING) RETURN VARCHAR2 IS --執行OS命令測試
  LANGUAGE JAVA NAME ' ExeSysCommand.ExeCmd(java.lang.String) return java.lang.String';
注意:有引數cmd,對應java的輸入型別應當為java.lang.String.

還應當注意的是這些應當在SYS使用者下操作,如果在其他使用者下,會獲得錯誤:

the Permission (java.io.FilePermission <<ALL FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' )

如果確實需要其他使用者來執行,可以使用dbms_java.grant_permission來給相應使用者賦許可權.

下面是在windows環境下操作:

C:\Documents and Settings\Administrator>tasklist | find "calc"

先確認系統當前沒有執行計算器程式.

好,讓我們來用剛建立的plsql函式execmd來執行這個計算器程式.

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 10 17:26:17 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

17:26:17 
[email protected]
> select execmd('calc') from dual; EXECMD('CALC') ----------------------------------------------------------------------------------------- OK! 已用時間: 00: 00: 00.06 17:26:37 [email protected]> host Microsoft Windows XP [版本 5.1.2600] (C) 版權所有 1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>tasklist | find "calc" calc.exe 12000 Console 0 3,052 K

好了,我們看到計算器程式已經在運行了,但是非常不如意的是,沒有介面出來。。。

我猜想可能是由於Oracle最早是基於linux開發,而且和MS是死對頭(相關資訊請查詢Oracle的發家史...),所以沒有考慮過支援WIN介面.

--

不過就算這樣,也很方便了,我們可以建立定時JOB,通過PL/SQL來呼叫OS上的任何程式/指令碼等做相關的任務了.

相關推薦

使用PL/SQL執行OS命令

pl/sql做為sql語言的一種補充語言,其優勢自然是在處理資料方面,但是隨著PL/SQL的不斷成長,尤其是和JAVA語言的聯絡越來越緊密,這使得PL/SQL也能完成一些高階應用操作了。 這裡方法也類似,只是需要傳入命令引數. 同樣首先建立java source c

Oracle PL/SQL 執行包裡的儲存過程 遊標輸出引數

oracle PL/SQL 如何執行包裡的儲存過程,儲存過程帶遊標輸出引數 [問題點數:40分] 收藏帖子 回覆 mjlwq 結帖率 87.5% create or replace package pkg_

PL/SQL執行sql的原理

SQLplus執行sql語句的原理,plsql是一個與oracle互動的客戶端工具,可以通過它輸入sql語句。 在plsql中輸入SQL語句時,該語句將被存放在sql緩衝區(一個記憶體區域)。這個快取區很小,只能存放一條sql語句, 當下一條sql語句輸入時,原來快取區的那

看懂PL/SQL執行計劃的顯示結果

統計資訊解釋: recursive calls           遞迴呼叫,有時為了執行使用者發出的一個sql語句,Oracle必須執行一些額外的語句,我們將這些額外的語句稱之為''recursive                            

PL/SQL DEVELOPER 軟體不能執行命令

SQL> shutdown immediate; shutdown immediate ORA-00900: 無效 SQL 語句 ------解決方法-------------------------------------------------------- P

MS SQL執行大腳本文件時,提示“未能完成操作,存儲空間不足,無法處理此命令”的解決辦法

test 備份 問題 -s bsp lib sdn 但是 str 問題描述: 當客戶服務器不允許直接備份時,往往通過導出數據庫腳本的方式來部署-還原數據庫, 但是當數據庫導出腳本很大,用Microsoft SQL Server Management Studio執行腳本時,

pl/sql developer執行游標所在行

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

[SQL]MySQL基本命令(Mac OS X)

1.登陸與退出: /usr/local/MySQL/bin/mysql -u root -p 輸入密碼後回車即可登陸,也可以在p後直接寫密碼,但是存在安全性問題,登陸後發出如下警告: 2.資料庫操作: 1.建立create: create database da

python 執行shell命令的幾種方法(os.system、os.popen、subprocess、commands)

1、os.system 該函式返回命令執行結果的返回值,並不是返回命令的執行輸出, system()函式在執行過程中進行了以下三步操作: 1.fork一個子程序; 2.在子程序中呼叫exec函式去執行命令; 3.在父程序中呼叫wait(阻塞)去等待子程序結

SQLPL/SQL的效能優化之二--執行計劃管理

1、提示--它們僅是建議,優化器可以選擇忽略他們。事實上,優化器將盡可能地遵從優化提示,哪怕會導致空難性的效能影響。一般來說,只有當你用盡非直接方法(收集統計資訊,建立柱狀圖及設定配置引數等)之後,才可以考慮使用提示。     下面是一些更常見的提示:  

shell指令碼執行hive命令傳值給sql檔案、shell傳參

使用場景,大資料平臺azkaban任務中通過shell指令碼呼叫sql檔案(尤其是呼叫多個sql時),希望可以傳參到sql檔案中 方法:本例以sh呼叫hive命令執行sql為例,道理相同 1、sh 檔案中執行hive -f 命令 將inputdate傳給sql檔案使用

SQLPLUS執行PL/SQL語句塊

1.首先登入Oracle HR schema: 2.對於PL/SQL程式,分號表示語句的結束;而使用 "."  號表示整個語句塊的結束,也可以省略。按回車鍵後,該語句塊不會執行,即不會發送到資料庫伺服器,而是必須使用 "/" 符號執行PL/SQL 語句塊 使用 "/" 執行PL

PL/SQL 報錯:動態執行表不可訪問,本會話的自動統計被禁止。 在執行選單裡你可以禁止統計,或在v$session,v$sesstat 和vSstatname表裡獲得選擇許可權。

現象: 第一次用PL/SQL Developer連線資料庫,若用sys使用者登入並操作則正常,若用普通使用者比如haishu登入並建立一個表則報錯“動態執行表不可訪問,本會話的自動統計被禁止。在執行選單裡你可以禁止統計,或在v$session,v$sesstat和v$statname表裡獲得選擇許可權。

python基礎之使用os.system來執行系統命令

PS:dir(sys)可獲取sys所有介面 第二種方法是在linux命令列下鍵入:python,然後就會進入python,並顯示相關資訊,結果如圖: 看到了吧,上面顯示了:python版本:2.7.2 作業系統版本:red hat 4.1.2 當然你也可以在這裡面鍵入上述命令,如圖: 原文連結:   h

oracle pl/sql執行帶 OUT 的儲存過程

DECLARE V_result1 VARCHAR2(20); V_result2 VARCHAR2(20); BEGIN Proc_GetSeqence('SubtitleNo',V_res

pl/sql developer不需要選中,執行游標所在行

問題:        執行某一行語句時,需要選中改行語句,按F8才能執行; 解決辦法:       工具——》首選項——》SQL視窗——》自動選擇該語句。這樣游標放在此行,按F8就可以執行,需要注意的是sql語句必須以分號結束。

PL\SQL 開啟時出現"動態執行表不可訪問,本會話的自動統計被禁止"

這個報錯資訊在不同的PL/SQL Developer版本都會出現,從上面詳細的報錯提示資訊中我們可以判斷得到,報錯原因不在工具本身。 在此,詳細記錄一下這個小問題的三種處理方法。 1.第一種處理方法(不推薦) 就是在報錯的Error對話方塊中將“Don't show thi

DOS視窗中直接執行cmd命令執行sql檔案

有時我們會在沒有裝有相應資料庫的情況下我們還是要去執行資料庫語句 , 這時的資料庫就是在別的電腦上,我們只需知道他資料庫的IP地址,使用者名稱,密碼和所需用到的資料庫名即可。 在dos下執行 :   cmd /c osql -S"127.0.0.1" -U"sa" -P

Python常用模組++OS(操作目錄,執行系統命令)

import os os.system("ls") - - - 可用作簡單的系統終端(cmd,Terminal)命令執行 os.name - - - 可用作判斷當前系統環境 os.getcwd() - - - 可檢視當前工作目錄 os.environ - -

pl/sql 建立並執行oralce儲存過程,並返回結果集

因為以前一直用sql server多,現在一下子用oracle ,工具什麼都不熟,侷限於sql server的思想  網上搜,和問朋友,跟我講了一大堆,什麼loop 啊,decalre啊,package啊,什麼命令視窗啊,什麼 sql plus啊,什麼不支援pl/sql啊.