0

バックエンドデータベースクエリの1つに対してこのSQLを作成するWebサイトがあります(質問のために単純化しています)

 Select * 
   from People 
   where Status = 'Active'
     and GroupId = 103403 
     and  (TeamName in ('TEAM1', 'TEAM2')) 
     and DELETED is NULL

これはうまくいきます。次のような新しいチーム名をいくつか追加する必要があります

Select * 
  from People 
   where Status = 'Active'
   and GroupId = 103403 
   and  (TeamName in ('TEAM1', 'TEAM2','TEAM3', 'TEAM4')) 
   and DELETED is NULL

そして、私はこのエラーを受け取ります:

ORA-01722: 番号が無効です

奇妙なのは、私がこれを行う場合、「TEAM3」または「TEAM4」に問題がないように見えることです。

Select * 
  from People 
   where Status = 'Active'
   and GroupId = 103403 
   and  (TeamName in ('TEAM3', 'TEAM4')) 
   and DELETED is NULL

それもうまくいきます。したがって、「IN」状態のチームが一定数ある場合にのみ、それが壊れます。

問題が何であるかについての提案。そのOracleエラーをグーグルで検索すると、データ型の不一致が原因でSQLに変換ロジックが根本原因として含まれているかどうかがわかりますが、ここには変換ロジックがありません。

4

1 に答える 1

3

GroupIdは数値列ではないと思われます。また、他の条件に応じて、条件GroupId = 103403は他の条件の前または後に評価されます。列に無効な数値を含む行が評価された場合GroupId、クエリは失敗します。

私の仮定が正しければ、条件を次のように変更します。

GroupId = '10340'

ところで:実際のSQLコード、独自のテストで実行したコードを投稿してください。現在のコードには二重引用符が含まれており、ほとんど機能しません。

于 2013-09-21T12:29:50.833 に答える