2010-05-10 83 views
1

我做下面的perl腳本:的Perl -check未初始化值

my @pm1_CS_missing_months = `sqlplus -s $connstr \@DLmissing_months.sql`; 

它需要一個SQL查詢的輸出。 如果我必須檢查沒有選中的行,我該怎麼辦? 我想要做的是這樣的:

if(no rows selected) 
{ 
do this; 
} 
+0

也許你可以展示一個輸出的例子嗎? – 2010-05-10 13:01:37

+0

爲什麼輸出需要在這裏?..它是一個簡單的情況,其中沒有行由sql query返回。我想爲chekc'if(pm1_CS_missing_months爲NULL)' – Vijay 2010-05-10 13:05:28

+0

是否有任何理由爲什麼你打電話給直接使用'sqlplus'命令行工具,而不是使用DBI接口? – Ether 2010-05-10 16:30:50

回答

3

在標量上下文中(例如,在ifunless條件中),數組求值爲數組中的項目數。如果您的SQL結果集不包含行,則該數組將評估爲0 - 一種錯誤。

unless (@pm1_CS_missing_months){ 
    # No rows: do this... 
} 
2

我會用DBD::Oracle去。

+0

事實上,如果你需要的不僅僅是命令的原始輸出,那麼執行引用還不夠,我也會去DBI/DBD。 – 2010-05-10 13:13:43

+0

不僅用於檢查命令的原始輸出,還用於檢查與服務器的連接是否成功。 – 2010-05-10 13:23:07

0

基本上,如果您使用sqlplus,您的輸出將取決於查詢。例如,如果沒有符合條件的行,並且您正在執行SELECT COUNT(*) FROM TABLE,則在輸出中您將得到0。如果你正在做SELECT * FROM TABLE,你只會得到「不選擇行」的答案,這不是一個空的輸出。所以僅僅檢查輸出是否爲空或零是不夠的,檢查是否還有字符串「沒有選擇行」。