データIDが0001のときは商品データを示し、データ1には商品番号、データ2には商品名、データ3には定価が入るものとする。 データIDが1111のときは販売データを示し、データ1には顧客番号、データ2には販売金額が入るものとする。 すると、データ2だけを見た場合、文字列(商品名)や数値(金額)が入り混じることになる。 販売金額が1000円以上のものだけを取り出したいとすると、以下のようなSQLを書きたくなる。 select * from 汎用テーブル where データID = '1111' and TO_NUMBER(データ2) >= 1000 ; しかし、SQLの実行計画では「データ1の条件を先に判断して、そこで条件外だったときに後の条件を無視する(処理しない)」とは限らない。 データIDが0001であってもTO_NUMBER()が実行されてしまい、(数値でない)文字列なのでエラーにな