0

SQLクエリのwhere句でOracle SQLで以下のようなことをしたい

$p="All" then buildingname in(Building から buildingname を選択) else buildingname="$p"

問題は、この $p 変数を解析できないことです。つまり、変数に何が含まれているかを確認できません。

4

3 に答える 3

3

OR条件が欲しいだけのように聞こえますが、

SELECT *
  FROM sometable
 WHERE (    :bind_variable = 'All' 
        AND buildingname IN (SELECT buildingname
                              FROM building))
     OR buildingname = :bind_variable
于 2012-08-08T15:20:55.597 に答える
0

文字列内の変数が含まれているものに置き換えられた場合 (したがって、バインド変数ではなく、PERL や PHP などの言語の変数であり、作成している選択文字列内で使用されます):

$selectstring = "SELECT *
  FROM sometable
 WHERE (    '$p' = 'All' 
        AND buildingname IN (SELECT buildingname
                              FROM building))
     OR (   '$p' <> 'All' AND buildingname = '$p'"

SQL インジェクションの危険性に注意してください。バインド変数の方が優れています。とにかく、値「All」を含む変数 $p のステートメントは次のようになります

SELECT *
  FROM sometable
 WHERE (    'All' = 'All' 
        AND buildingname IN (SELECT buildingname
                              FROM building))
     OR (   'All' <> 'All' AND buildingname = 'All')

「XYZ」を含む変数 $p の選択文字列がありますが、

SELECT *
  FROM sometable
 WHERE (    'XYZ' = 'All' 
        AND buildingname IN (SELECT buildingname
                              FROM building))
     OR (   'XYZ' <> 'All' AND buildingname = 'XYZ')

しかし、正直なところ、次のようなこともできます

if ($p eq 'All') {
...   one select
} else {
...   another select
}
于 2012-08-08T20:20:22.890 に答える
0

サブクエリで OR を使用できるため、$p が 'All' の場合は、建物の選択またはすべてを選択します。

buildingname in (Select buildingname from Building WHERE buildingname = $p OR $p = 'All')
于 2012-08-08T15:21:25.480 に答える