首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlplus sqlplus属性

sqlplus sqlplus属性
EN

Stack Overflow用户
提问于 2012-08-02 20:22:21
回答 1查看 352关注 0票数 1

我正在尝试运行一个sql文件,该文件从sql表中选择计数,并在ant中使用sqlplus将其存储在一个变量中。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2012-08-02 22:50:37

根据this的说法,resultProperty是:

应存储命令返回代码的属性的名称

..。因此,它将从SQL*Plus获得退出代码,而不是您查询的值。如果您的脚本有多个查询,或者有多个列的查询,您希望它将其设置为什么?

您也许可以通过使用SQL*Plus COLUMN命令的NEW_VALUE语法来创建替代变量,从而颠覆退出状态来实现这一点:

代码语言:javascript
复制
column table_count new_value my_exit_code
select count(*) as table_count from ...
exit &my_exit_code

..。但是你会失去任何检测真正错误的能力。

编辑:我忘记了退出代码是有限制的;来自the SQL*Plus documentation

在某些操作系统上,操作系统返回代码的范围也受到限制。这限制了出口n和出口变量在平台之间的可移植性。例如,在UNIX上,返回代码只有一个字节的存储空间;因此,返回代码的范围被限制在0到255之间。

因此,除非你总是期望一个非常小的计数,否则这是行不通的,因为它会修改值,你甚至不能指望零/非零是有意义的。

您可能实际上并不关心计数;您可能只是在测试某些东西的存在,在这种情况下,您可以这样做:

代码语言:javascript
复制
select least(count(*), 1) as table_count from ...

..。如果没有行,则返回退出代码0;如果有行,则返回1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11777325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档