-2

I get an error in the below select query. This is the error I receive:

ORA-00905: Missing Keyword

Can anyone help ?

SELECT ni.node_installation_id,ni.customer_node_id,ni.customer_id,c.brand_name_1,substr(nitr.name,1,instr(nitr.name, ' ')-1) as node_inst_type
    from node_installation ni , customer c , node_inst_type_release nitr
    where ( Case 
            WHEN ni.arne_timestamp is null  THEN ( case  
                                                   when ni.arne_flag ='I' then ni.arne_flag ='I'
                                                   END )
     else (trunc(sysdate) - trunc(ni.arne_timestamp) >= 60)
      end)     
and ni.customer_id = c.customer_id 
and ni.node_inst_type_release_id = nitr.node_inst_type_release_id
and ni.no_of_collection_node_missed >= 4
and c.customer_id =90;
4

2 に答える 2

1

おそらく問題は次のcaseとおりです。

( 
  case  
    when ni.arne_flag ='I' 
      then ni.arne_flag ='I'
  END 
)

条件は完全に間違っていると思います。次のように変更してみてください。

((ni.arne_timestamp is null and  ni.arne_flag ='I')
or
(trunc(sysdate) - trunc(ni.arne_timestamp) >= 60))

以下のように:

    SELECT ni.node_installation_id,
           ni.customer_node_id,
           ni.customer_id,
           c.brand_name_1,
           substr(nitr.name,1,instr(nitr.name, ' ')-1) as node_inst_type
     from node_installation ni , 
          customer c , 
          node_inst_type_release nitr
   where ((ni.arne_timestamp is null and  ni.arne_flag ='I')
          or
          (trunc(sysdate) - trunc(ni.arne_timestamp) >= 60))     
    and ni.customer_id = c.customer_id 
    and ni.node_inst_type_release_id = nitr.node_inst_type_release_id
    and ni.no_of_collection_node_missed >= 4
    and c.customer_id =90;
于 2012-10-11T07:47:08.683 に答える
0

あなたの内側の CASE ステートメントは私には間違っているように見えますが、構文的に正しくない理由は 100% ではありません。

CASE 
       WHEN ni.arne_flag = 'I' THEN **ni.arne_flag = 'I'**  END 

「THEN」の後の式は値である必要があると思いますが、いずれにせよ冗長です。

于 2012-10-11T07:48:04.297 に答える