2017-07-13 12 views
0

を使用してすべての従業員の給与を更新したいです。PL/SQL oracle。これは私のコードです。従業員テーブルの給与計算列からすべての行を更新する方法は?

DECLARE 
      c_id customers.id%type; 
      c_sal customers.salary%type; 
     BEGIN 
     SELECT salary 
     INTO c_sal 
     FROM customers; 

     IF (c_sal <= 6500) THEN 
      UPDATE customers 
      SET salary = salary + 1000; 


      dbms_output.put_line ('Salary updated'); 
     END IF; 

    END; 
    /

だからここには、Employee表です:

選択*顧客から。あなたの質問を1として

ID NAME  AGE ADDRESS      SALARY 
1 Ramesh 32  Ahmedabad     3000 
2 Khilan 25  Delhi      1500 
3 kaushik 23  Kota      2000 
4 Chaitali 25  Mumbai      6500 
5 Hardik 27  Bhopal      8500 
6 Komal 22  MP       4500 
+0

あなたはMySQLやOracleを使用する:下のIF-ELSEを使用してカーソルでコードがありますか? (含まれていない製品にはタグを付けないでください) – jarlh

+0

Oracleを使用しています... –

+0

「何らかのエラーを言いなさい」 - それ以上に具体的にすることはできますか? –

答えて

0

、あなたはsalary <= 6500を持つall the rows in Employeeテーブルを更新します。したがって、変数や選択クエリは必要ありません。あなたの手続きで簡単な更新ステートメントを持つことができます。 DECLAREセクションの必要はありません。

BEGIN 
UPDATE customers 
SET salary = salary + 1000 
WHERE salary <= 6500; 
COMMIT; 
dbms_output.put_line ('Salary updated'); 

EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    dbms_output.put_line ('No any employee is having Salary <= 6500.'); 
END; 
/

あなたはIF-ELSEを持ちたいと、あなたはカーソルでそれを行うことができます。しかし、私は常に上記の最初のオプションと一緒に行きます。

DECLARE 
    CURSOR my_cursor IS select * FROM customers; 
BEGIN 
    FOR r1 in c1 
    LOOP 
    IF (r1.salary <= 6500) THEN 
     UPDATE customers c SET c.salary = (c.salary + 1000) WHERE c.id = r1.id; 
     -- If id is not primary/unique key, use WHERE CURRENT OF c1 
    END IF; 
    COMMIT; 
    END LOOP; 
END; 
/
+0

「コミットする」または「ロールバックする」誰ですか? – g00dy

+0

この回答は正しいですが、給料が6500以下であれば条件が欲しい、という場合はelse文が必要です。 クエリを書き直してください。ありがとうございます。 –

+0

しかし、なぜそれを1つのステップで行うことができたら複雑にしたいのですか? –

-1
DECLARE 
c_id customers.id%type := 1; 
c_sal customers.salary%type; 
     BEGIN 
     SELECT salary 
    INTO c_sal 
    FROM customers 
    where id=c_id; 
    IF (c_sal <= 6500) THEN 
     UPDATE customers 
     SET salary = salary + 1000; 
     dbms_output.put_line ('Salary updated'); 
    END IF; 

END; 
/
+0

答えは正しいですが、私の質問はすべての従業員の給与を更新することです。ここではid = 1の場合のみ更新します。 –

+0

私はそれを解決させるよ – Vivek

関連する問題