2015-02-24 64 views
0

我們試圖通過在批處理文件中調用一個SQL文件來創建一個輸出文件(SQL.txt),它成功了,然後嘗試從輸出文件中的特定行分配特定值(SQL。 txt)使用FOR/f命令給變量,並基於此我們嘗試將IF條件與變量值進行比較。事情是當我們回顧變量值時,它顯示的價值,也顯示下面的行。因此,IF條件不起作用。使用SQL輸出的批處理腳本

詳情請參閱下面的查詢。

1) call sqlplus username/[email protected] @D:\SQL\REORG_DATA.sql >D:\SQL\SQL_OUTPUT\output.txt 
2) for /f "skip=14 delims=5" %%n in (D:\SQL\SQL_OUTPUT\output.txt) do echo %%n 
3) if %%n EQU 0 goto ErrExit 

我的輸出文件始終下同輸出文件信息

我們想捕捉0(零)值到IF條件作爲變量值(%% N),它總是15號線和6 dlims

1 
2 SQL*Plus: Release 11.2.0.1.0 Production on Mon Feb 23 14:17:56 2015 
3 
4 Copyright (c) 1982, 2010, Oracle. All rights reserved. 
5 
6 
7 Connected to: 
8 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
9 With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, 
10 Data Mining and Real Application Testing options 
11 
12 
13 COUNT(*) 
14 ---------- 
15  0 
16 
17 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
18 With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, 
19 Data Mining and Real Application Testing options 
20 

請幫助。

問候 納格

回答

0
set "count=" 
for /f "skip=14" %%n in (
    D:\SQL\SQL_OUTPUT\output.txt 
) do if not defined count set "count=%%n" 

echo %count% 

delims定義哪些字符被用作分隔符。默認配置是空格和製表符,所以不需要包含它。

您需要檢索的行中的元素由tokens子句控制,但默認配置是檢索第一個元素,這就是您需要的,所以它也不是必需的。

現在,您跳過14行並檢索行中的第一個元素。但你只需要檢索第一個處理過的行的數據。但是對其餘的行執行do子句,重新分配變量。您可以包含goto以退出循環或測試變量是否已分配值。

編輯使用goto命令

set "count=" 
    for /f "skip=14" %%n in (D:\SQL\SQL_OUTPUT\output.txt) do set "count=%%n" & goto :done 
:done 
    echo %count% 
+0

由於包括樣品供你參考,如你所說的我跟隨,也試圖把GOTO命令從循環退出,但它仍然是重新分配剩餘的行來計數變量,我需要確切的單行值,你可以告訴如何分配單個值後,如何把goto命令。在(D:\ SLB \ APP \ Hyperion \ Automations \ SQL \ SQL_OUTPUT \ output.txt)中爲/ f「skip = 14」%% n設置「count =」 do gotof eof「count = %% n」 回聲%count%我已經使用上面的代碼離開循環。 – NAG 2015-02-24 12:52:02

+0

@NAG,回答更新以包含代碼與'goto' – 2015-02-24 12:58:05

+0

我建議,如果15行的值總是數字,'set/a count = %% n'會更可取。 – Magoo 2015-02-24 13:54:09