2017-10-29 10 views
1

データベース項目をページ項目vaueで更新したいとします。ページ項目がnullの場合は、SQL Select Queryから返された値で置換します。oracle select nvl内の照会

update user 
    set pswd := nvl(:P10_PSWD,select pswd from user where uname=:P10_UNAME), utype=:P10_UTYPE where uname=:P10_UNAME; 

column-utypeとpaswdを更新したいと考えています。 item:P10_PSWDがnullの場合、pswdを既存の値で更新し、utypeにP10_UTYPEを追加します。これを行う方法?

バインド変数は、ユーザーのNULL元のパスワードが保存されている場合は、バインド変数は、パスワードが更新されて設定されている場合:

+2

** SQL **(したがって、UPDATE文)の代入演算子は '='です。変数を割り当てるには、** PL/SQL **で ':='が必要です。 –

+0

こんにちは、私は私のクエリと詳細に変更があります。 @a_horse_with_no_name – Nidheesh

+0

もし:P10_PSWDが** '**'でないなら、 'utype'を更新したくないですか?あなたもそれを明確にする必要があります。また、クエリを変更しましたが、最初の割り当てでは '='ではなく ':='が間違っています。 – mathguy

答えて

2

サブクエリを使用する理由はありません。現在の行の列の値を使用する場合は、その行の名前を使用します。

あなたがutypeは、すべての場合に更新される、または:P10_PSWDNULLある場合にのみたい場合は、それは、でも、変更後、まだ明らかではないが、

update user 
    set pswd = nvl(:P10_PSWD, pswd), utype = :P10_UTYPE 
    where uname=:P10_UNAME; 

ような何かをしたいようです。上記のUPDATEは、utypeに関係なく更新されます。 :P10_PSWDは、NULLあるときにのみ、それが更新したい場合は、utypeへの割り当てがある必要があり

..... , utype = nvl2(:P10_PSWD, utype, :P10_UTYPE) 
..... 

NVL2機能:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions106.htm

+0

テーブル名(予約語)として 'user'を使用しないでください –

+0

@BarbarosÖzhan - それはOPが元の質問にあったものです。私たちはOPが本当に**その名前でテーブルを持っていない(DBはそれを受け入れないだろう)と私は安全に考えることができるので、私はそれを残してコメントしませんでした。しかし、はい、あなたは100%正しいです - テーブルは 'user'と名付けることはできません。 – mathguy

+0

すべてのケースでutypeを更新したいと考えています。ユーザーではなくユーザーです。私はここで生まれた新しい..すみません。サポートに感謝します。 – Nidheesh

2

このアップデートは、要求された変更を行います。

update userw 
    set pswd = :P10_PSWD 
where :P10_PSWD is not NULL and uname=:P10_UNAME; 
+0

こんにちは、私は私のクエリと詳細の変更を持っています – Nidheesh

1

あなたは、あなたが簡単に使用することができ、必要はありません、あなたのwhere句とNVL選択し、でuname=:P10_UNAMEそれを備えています。

UPDATE user 
    SET 
     pswd = NVL(:p10_pswd,pswd), 
     utype = :p10_utype 
WHERE 
    uname = :p10_uname; 
1

あなたはそれが文句を言わないスローrequired.but場合もutype値を処理するためにあることを確認しますと、代わりにnullで更新されます。私は最良の方法は、ヌルの場合は、既存のままと言うだろう。それはあなたの要求に依存します。

update user 
set pswd = nvl(:P10_PSWD,pswd), 
     utype = nvl(:P10_UTYPE,utype) 
where uname = :P10_UNAME; 
関連する問題