2011-10-28 11 views
0

PostgreSQLデータベースで以下の更新クエリを実行したいが、動作しないため、構文エラーが発生する。PostgreSQLビット演算子の使い方| =

クエリ

update wl_user set role_bitmask= role_bitmask|=1 where email='[email protected]' 

問題が|=演算子であると思われる次のように、誰もがどのように使用するかのアイデアを持っているん| = PostgreSQLの演算子を?

以下はエラーです。

[Err] ERROR: operator does not exist: integer |= integer 
LINE 1: ...pdate wl_user set role_bitmask=role_bitmask|=1 where ... 
                  ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

答えて

2

代わりのrole_bitmask= role_bitmask|=1あなたは|=が何を考え、何を|ない場合も、いくつかの理にかなっているrole_bitmask=role_bitmask|1を使用する必要があります。

明確にする:PostgreSQLには多くの演算子があり、新しい演算子を定義することができます。しかし、あなたの場合には、これは二つの理由のために重要ではありません:

  • マニュアルUPDATEの構文(省略)について述べている:UPDATE ... table ... SET column = { expression | DEFAULT }。つまり、=は必須であり、ではなく、のいずれかの通常の演算子です。したがって、|=はなく、&=はありません。
  • これらの拡張可能な演算子の中には、代入演算子はありません。割当は、それぞれのケースに対して特別な方法で処理されます。いくつかのヒントについてはthis questionをご覧ください。あなたの質問について

:あなたは長い形式... SET column = colum | bitmaskを使用する必要があります。role_bitmask= role_bitmask|=1のような表現は、眉毛がすべての言語:-)

概要に上げてください。