2012-08-02 65 views
1

我想從sql表中運行一個具有select count的sql文件並將它存儲在一個使用sqlplus的ant中的變量中。sqlplus resultproperty

ora:sqlplus dir="${basedir}" start="${sql_count_table_name}.sql" silent="true" 
    logon="${sql_username}/${sql_password}@${sql_database}" 
    failonerror="false" resultproperty="tablecount"> 
</ora:sqlplus 

但是表計數沒有被分配給變量tablecount。

回答

1

thisresultProperty是:

屬性的名稱,其中的命令的返回代碼應該是 存儲

...所以它會得到退出代碼SQL * Plus,而不是您查詢的值。如果您的腳本有多個查詢或多列查詢,您會期望它將它設置爲?

也許你可以顛覆退出狀態來實現這一點,使用SQL * Plus的COLUMN命令的NEW_VALUE語法來創建一個替換變量:

column table_count new_value my_exit_code 
select count(*) as table_count from ... 
exit &my_exit_code 

...但你會失去任何檢測能力真正的錯誤。


編輯:我忘了退出代碼是有限的;從the SQL*Plus documentation

的操作系統的返回代碼範圍也受到限制於某些 操作系統。這限制了平臺之間EXIT n和EXIT 變量的可移植性。例如,在UNIX上,返回碼只有一個 存儲字節;因此,對於回報 代碼的範圍被限制在0到255

所以,除非你總是期待一個非常小的數,這將無法工作,並且將國防部的價值,你不能甚至依靠零/非零是有意義的。

你可能實際上並不關心計數;你可能只是用於測試存在的東西,在這種情況下,你可以這樣做:

select least(count(*), 1) as table_count from ... 

...這將使你的退出代碼0,如果沒有行,和1如果有任何。