【发布时间】:2011-04-13 07:05:50
【问题描述】:
我有一个主表(以下称为 SURVEY)和一个详细表(以下称为 ANSWERS)。毫不奇怪,ANSWERS 有 SURVEY 问题的答案。 ANSWERS 有一个名为 TEXT 的 VARCHAR2 列。一些 ANSWERS.TEXT 值是真正的文本,但有些实际上是数字。幸运的是,我总是知道哪些行包含文本,哪些包含数字作为文本。
就是这样。我无法改变这一点。
过去,当某些 ANSWERS 行被保存时,它们的 TEXT 值是经过精心挑选的,并被放入正确类型的列中的 SURVEY 表中。一个简单的单表选择将获取 SURVEY 和特殊值。
但是现在,随着新应用程序的添加,我们删除了特殊列。相反,我们现在必须取而代之的是获取适当的 ANSWERS 行的 TEXT 值。
我创建了一个模拟旧的琐碎选择语句的查询。它工作得很好......主要是。
这是一个sn-p:
select survey.*,
j2.overall_score
from survey,
(select to_number(trim(ANSWER.text)) overall_score,
survey.id survey_id
from ANSWER,
[edited - more SQL that gets the 'score' row from ANSWERS]) j2
where
survey.id=j2.survey_id
and overall_score > 70
您可能会注意到 j2.在实际查询中,有六个这样的列,j1 到 j6。当我运行查询时,它看起来 就像旧查询一样。你不能说它真的是由主/细节组装而成的。这是一种解脱!
但是,我的问题是“overall_score > 70”短语会导致“1722 无效数字”错误。当我不包含该短语时,Oracle 就像蛤蜊一样高兴,所以所有输出都通过 j2 的 to_number() 函数并且看起来不错。但是如果我添加条件,我会失败。
where 子句的“overall_score”部分是根据从网页输入的搜索条件动态添加的。
我需要一些 fu 来告诉 Oracle 我真的知道我在做什么,请去做。如果有非数字数据,ok,让j2的to_number()失败。凉爽的。但除此之外,就去做吧。
有什么妙语吗?我是承包商,时间快到了。这是一个新要求:-/
【问题讨论】:
-
您是否查看过
j2返回的内容,与最终查询分开?我很难相信您在外部查询中遇到了无效数字错误——我希望TO_NUMBER转换会触发错误。 -
如果我删除 '> 70' 条件,查询返回行。当我添加条件时,我得到 '1722 invalid number' 悲伤。
-
oops 命中返回而不是换行。当我单独运行 j2 子查询时,它返回有效行且没有错误。