2009-10-28 113 views
39

是否可以這樣做?來自命令行的sqlplus語句

$ sqlplus -s user/pass "select 1 from dual"
$ echo "select 1 from dual" | sqlplus -s user/pass

我知道我可以把select 1 from dual在文件中,這樣做:
$ sqlplus -s user/pass @myFile.sql

,但我想知道如果它實際上需要創建一個文件只是爲了滿足sqlplus

+1

可能的重複 - http://stackoverflow.com/questions/638705/how-can-i-issue-a-single-command-from-the-command-line-through-sql-plus – vapcguy 2016-06-07 21:30:34

回答

45

只要知道在Unix/Linux上,任何可以運行「ps -ef」命令的用戶都可以看到你的用戶名/密碼,如果直接將它放在命令行上。可能是一個很大的安全問題(或者變成一個很大的安全問題)。

我通常建議創建一個文件或使用here文檔,以便在Unix/Linux中使用「ps -ef」命令保護用戶名/密碼不被查看。如果用戶名/密碼包含在腳本文件或sql文件中,則可以使用適當的用戶/組讀取權限進行保護。然後,你可以保留用戶/像這樣的文件中通過在shell腳本:

sqlplus -s /nolog <<EOF 
connect user/pass 
select blah; 
quit 
EOF 
+0

並非總是如此,這取決於Oracle的版本和操作系統,但可能是一個很好的標準遵循 – dpbradley 2009-10-29 13:02:26

+0

太糟糕了heredoc's在DOS中不容易http://stackoverflow.com/questions/1015163/heredoc- for windows-batch – rogerdpack 2015-02-18 20:54:01

+0

奇怪的是,爲什麼命令行泄漏並不是簡單地在sql客戶端程序本身中處理的,因爲這樣做很簡單:在main()函數中,將命令行參數複製到新變量中,並且覆蓋舊的args/argv [],並且沒有命令行可見(或者 - 也許只有幾分之一毫秒) - 爲什麼oracle不實現該解決方案? – 2017-03-04 14:19:26

6

我認爲這是* nix?

使用 「立即文檔」:

sqlplus -s user/pass <<+EOF 
select 1 from dual; 
+EOF 

編輯:我應該想你的第二個例子。它的工作原理也一樣(即使在Windows中,SANS蜱):

$ echo 'select 1 from dual;'|sqlplus -s user/pw 

     1 
---------- 
     1 


$ 
24

我能夠通過只是確保有我的select語句的結束分號來執行您的具體查詢。 (輸出是實際的,刪除了連接參數。)

echo「select one from dual;」 | SQLPLUS -s用戶名/密碼@主機:1521 /服務

  1 
---------- 
     1 

不,是應該的問題,但文件sqlplus在Mac OS X雪豹運行和服務器的Oracle 11g。

+0

+1,但請注意,如果您在SQL * Plus中做了適度複雜的任何操作,則通常會生成一些SET指令,如果您希望執行單行命令,這將變得很麻煩。 – dpbradley 2009-10-28 20:22:01

+0

+1這是一個有用的單線程,以快速運行簡單查詢 – 2014-03-27 15:01:13

+0

+1最後,答案!將分號添加到查詢的末尾!您實際上可以運行sqlplus,登錄,然後運行命令 - 您不必在憑證中輸入管道。我的問題是命令沒有運行 - 行號不斷增加!現在我知道如何讓它們運行 - 只需添加一個分號!謝謝! – vapcguy 2016-06-07 21:29:41

20

我的版本

$ sqlplus -s username/[email protected]:port/service <<< "select 1 from dual;" 


     1 
---------- 
     1 

編輯:

爲多,你可以使用這個

$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/[email protected]:port/service 


     1 
---------- 
     1 


     2 
---------- 
     2 
+0

我*真的*喜歡這個,但它似乎不工作在tcsh – dldnh 2014-03-18 15:27:25