2017-04-04 26 views
0

我在Windows 2003 R2上有一個Oracle 11實例。SQLPLUS-來自命令行的多個sql語句

我運行該工具來獲取輸出,如下圖所示:

C:\>echo select count(*) from v$session; | sqlplus -s zabbix/[email protected]: 

1521/ORCL

COUNT(*) 
    ---------- 
     31 

但是,我所要的輸出僅僅是31,而不是與列標題和在它下面的行 - 從SQL * Plus中得到SET HEADING OFF的效果。

我遇到了this question其中建議使用-e選項爲echo,但這似乎不能在Windows上工作,或者我錯過了一些東西。

C:\>echo -e "set heading off; \n select count(*) from v$session;" | sqlplus -s zabbix/[email protected]:1521/orcl 

SP2-0734: unknown command beginning "-e "set he..." - rest of line ignored. 

這是帖子中提到的具體命令我上面提到的:

C:\>echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s zabbix/[email protected]:1521/orcl 

SP2-0734: unknown command beginning "-e "select..." - rest of line ignored. 

我沒有看到一個SQL * Plus標誌,我可以使用(如-s我上面用沉默)轉前往。因此嘗試這種方法!

我能做些什麼來使它在Windows上工作?

回答

0

有點凌亂,但你可以這樣做:

C:>(echo set heading off & echo select count(*^^^) from v$session; & echo exit;) | sqlplus -s zabbix/[email protected]:1521/orcl 

     53 

^^^)部分is to escape the parenthesiscount(*),括號包裹兩個內回聲命令組合在一起 - 它提供的SQL * Plus的單一輸入。

這在頂部有一個空行;你可能更願意使用set pagesize 0而不是set heading off

C:>(echo set pages 0 & echo select count(*^^^) from v$session; & echo exit;) | sqlplus -s zabbix/[email protected]:1521/orcl 
     53 

你可以把多個設置在一個命令,如果你需要,也是如此。

或者,只需將所有命令放在腳本文件中,例如, test.sql

set pages 0 
select count(*) from v$session; 
exit 

,然後運行以:

sqlplus -s zabbix/[email protected]:1521/orcl @test 
+0

語法與 '0頁' 的偉大工程。謝謝Alex! – rvasu

+0

實際上,輸出值中的前導空格對我來說不適用於zabbix。 – rvasu

+0

我的意思是,而不是 從v $ session中選擇count(*); COUNT(*) -------------- 我需要: 從v $ session中選擇trim(count(*)); COUNT(*) ------------- 當我使用echo: (echo set page 0&echo select trim(LIMIT_VALUE)from v $ resource_limit where RESOURCE_NAME ='sessions' ;&echo exit;)| 「C:\ Program Files \ Zabbix \ sqlplus.exe」-s zabbix/pwd @ localhost:1521/orcl 我得到了 - '從目前意外情況來看'。任何想法如何解決這個問題? – rvasu