是否可以這樣做?來自命令行的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
是否可以這樣做?來自命令行的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
只要知道在Unix/Linux上,任何可以運行「ps -ef」命令的用戶都可以看到你的用戶名/密碼,如果直接將它放在命令行上。可能是一個很大的安全問題(或者變成一個很大的安全問題)。
我通常建議創建一個文件或使用here文檔,以便在Unix/Linux中使用「ps -ef」命令保護用戶名/密碼不被查看。如果用戶名/密碼包含在腳本文件或sql文件中,則可以使用適當的用戶/組讀取權限進行保護。然後,你可以保留用戶/像這樣的文件中通過在shell腳本:
sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
並非總是如此,這取決於Oracle的版本和操作系統,但可能是一個很好的標準遵循 – dpbradley 2009-10-29 13:02:26
太糟糕了heredoc's在DOS中不容易http://stackoverflow.com/questions/1015163/heredoc- for windows-batch – rogerdpack 2015-02-18 20:54:01
奇怪的是,爲什麼命令行泄漏並不是簡單地在sql客戶端程序本身中處理的,因爲這樣做很簡單:在main()函數中,將命令行參數複製到新變量中,並且覆蓋舊的args/argv [],並且沒有命令行可見(或者 - 也許只有幾分之一毫秒) - 爲什麼oracle不實現該解決方案? – 2017-03-04 14:19:26
我認爲這是* nix?
使用 「立即文檔」:
sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF
編輯:我應該想你的第二個例子。它的工作原理也一樣(即使在Windows中,SANS蜱):
$ echo 'select 1 from dual;'|sqlplus -s user/pw
1
----------
1
$
我能夠通過只是確保有我的select語句的結束分號來執行您的具體查詢。 (輸出是實際的,刪除了連接參數。)
echo「select one from dual;」 | SQLPLUS -s用戶名/密碼@主機:1521 /服務
1
----------
1
不,是應該的問題,但文件sqlplus在Mac OS X雪豹運行和服務器的Oracle 11g。
我的版本
$ 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
我*真的*喜歡這個,但它似乎不工作在tcsh – dldnh 2014-03-18 15:27:25
可能的重複 - 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