sqlplus resultproperty

时间:2012-08-02 12:22:21

标签: oracle ant sqlplus

我正在尝试从sql表运行一个具有select count的sql文件,并使用ant中的sqlplus将其存储在变量中。

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 个答案:

答案 0 :(得分: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上只有一个   返回码的存储字节;因此,返回的范围   代码限制为零到255。

因此,除非你总是期待一个非常小的计数,否则这将不起作用,并且因为它将修改该值,你甚至不能依赖零/非零有意义。

你可能实际上并不关心伯爵;你可能只是测试某事物的存在,在这种情况下你可以做类似的事情:

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

...如果没有行,则退出代码为0;如果有行,则退出代码为。