2017-07-13 2 views
0

Je veux mettre à jour tous les salaires des employés en utilisant PL/SQL oracle .Voici mon code.Comment mettre à jour toutes les lignes de Salary Column dans la table des employés? Ci-dessous est mon code

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; 
    /

Voici donc le tableau des employés:

select * des clients;

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

Utilisez-vous MySQL ou Oracle? (Ne pas étiqueter les produits non impliqués.) – jarlh

+0

Utilisation d'Oracle ... –

+0

"Dire une erreur" - pouvez-vous être plus précis que cela? –

Répondre

0

Selon votre question, vous voulez mettre à jour all the rows in Employee table ayant salary <= 6500. Vous n'avez donc pas besoin de variable ou de sélectionner une requête. Vous pouvez avoir une simple instruction de mise à jour dans votre procédure. Aucun besoin de la section 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; 
/

Comme vous voulez avoir IF-ELSE, vous pouvez le faire avec le curseur. Cependant, je vais toujours aller avec la première option ci-dessus. Voici le code avec le curseur qui utilise 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

'Commit;' ou 'Rollback' quelqu'un? – g00dy

+0

Cette réponse est correcte, mais la chose est que je veux la condition comme si le salaire est inférieur à 6500, j'ai besoin d'une autre déclaration. S'il vous plaît réécrire la requête.Merci. –

+0

Mais pourquoi voulez-vous le rendre complexe quand il peut être fait en une seule étape? –

-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

La réponse est correcte, mais ma requête est de mettre à jour tous les salaires des employés. Ici vous mettez à jour seulement où id = 1; –

+0

yah laissez-moi le résoudre – Vivek