1

PL / SQLコードを実行しようとしていますが、識別子に関するエラーが含まれています。コードが実行されていません

DECLARE
   a := customer.purchase%TYPE;
   id := &employee.empno;
BEGIN
   UPDATE employee SET salary = salary + 5000;
   UPDATE employee SET bonus = bonus + 1000 WHERE empno = &id;
   SAVEPOINT sumeet;
   UPDATE customer SET purchase = purchase + 5000 WHERE custid = a;

   SELECT SUM(purchase) INTO a;

   IF (a < 11000) THEN
      ROLLBACK sumeet;
   END IF;
   COMMIT;

END;
/
4

4 に答える 4

1

アレンの修正に加えて、ROLLBACKなぜあなたがしないのかの代わりに:

   UPDATE customer SET purchase = purchase + 5000 
    WHERE custid = a
      AND (select sum(purchase) from customer) + 5000 < 11000;

  COMMIT;
于 2013-01-14T10:07:44.583 に答える
1

1: これは間違っています:

DECLARE
  a := customer.purchase%TYPE;
  id := &employee.empno;

:=変数名の後に a を付けず、&無効でありemployee.empno、有効なデータ型ではありません。すなわち:

DECLARE
  a customer.purchase%TYPE;
  id employee.empno%TYPE;

&2: id 変数を参照する必要はありません。

UPDATE employee SET bonus = bonus + 1000 WHERE empno = &id;

すなわち:

UPDATE employee SET bonus = bonus + 1000 WHERE empno = id;
于 2013-01-24T06:50:05.177 に答える
0

ヒントは次のとおりです。従業員に関する2つの更新を1つにまとめます。

 UPDATE employee
 SET    salary = salary + 5000,
        bonus  = bonus  + case when empno = &id then 1000 else 0 end;

また、意味のある変数名の使用を開始します。

于 2013-01-24T10:22:12.550 に答える
0

このブロックを試してみますが、最初に宣言ブロックの値 (1, 2) を変更してください。

DECLARE
   a customer.purchase%TYPE := 1;
   id employee.empno%TYPE := 2;
BEGIN
   UPDATE employee SET salary = salary + 5000;
   UPDATE employee SET bonus = bonus + 1000 WHERE empno = id;
   SAVEPOINT sumeet;
   UPDATE customer SET purchase = purchase + 5000 WHERE custid = a;

   SELECT SUM(purchase) INTO a FROM customer;

   IF (a < 11000) THEN
      ROLLBACK sumeet;
   END IF;
   COMMIT;

END;
/
于 2013-01-14T09:22:23.377 に答える