仅在“某事”时创建条件 - 查询Oracle

时间:2016-11-12 01:48:21

标签: oracle case

我在查询中遇到问题。

我有一个名为“store”的表,我需要查询。

pod repo push --sources=https://your.private.repo/PodSpecs MFPods ~/Desktop/MFReusable/BlinkingLabel/BlinkingLabel.podspec

这应该可以,但是由于我在列中有“字符( - )”并且这被定义为数字,该查询引发异常:ORA-01722:无效的数字。 所以我想在查询中做这样的事情:

Select s.store_name
  from store s
 where s.store = case
                    when p_store != 0 then
                       p_store
                    else
                       s.store
                    end;

有可能吗? 谢谢!

编辑: 我上面写的查询是我运行的查询的一个例子。 引发异常的原因是另一列(PC前面的时间过多:-()。 这个表有一个varchar2(15)的列,我正在这样做:     (...)AND S.CODE> 4(...) 我想要做的正确条件是:     (...)AND LENGTH(S.CODE)> 4 谢谢大家!

2 个答案:

答案 0 :(得分:0)

据我所知,你有varchar2 s.store实际上包含数字,所以Oracle试图将它转换为数字,但在某些时候它会得到-并抛出异常。您应该做的是更新-替换null的表格。但是,如果您不想这样做,您可以尝试将案例返回varchar2

Select s.store_name
  from store s
 where s.store = case
                    when to_char(p_store) != '0' then
                       to_char(p_store)
                    else
                       s.store
                    end;

答案 1 :(得分:0)

我猜你是在plsql块中运行查询(作为游标?)。在那种情况下,动态sql是要走的路。查看REF CURSOR(谷歌!)。