ëÁÔÁÌÏÇïÇÌÁ×ÌÅÎÉÅéÎÄÅËÓ ÒÁÚÄÅÌÁ
îÁÚÁÄ÷ÐÅÒÅÄ


7. ôÒÉÇÇÅÒÙ

ôÒÉÇÇÅÒ: ÐÒÉ ÚÁÞÉÓÌÅÎÉÉ ËÏÎÔÒÏÌÉÒÕÅÔÓÑ ÐÒÅ×ÙÛÅÎÉÅ ÞÉÓÌÁ ÛÔÁÔÎÙÈ ÅÄÉÎÉÃ É ÆÏÎÄÁ ÚÁÒÐÌÁÔÙ.

Oracle

÷ ÓÒÅÄÅ Oracle Navigator ÓÏÚÄÁÅÔÓÑ ÔÒÉÇÇÅÒ ÎÁ ÔÁÂÌÉÃÕ work.


DB2

÷ ÓÒÅÄÅ Control Center ÓÏÚÄÁÅÔÓÑ ÔÒÉÇÇÅÒ:

ðÏÄÇÏÔÏ×ÉÍ ÎÏ×ÏÇÏ ÓÏÔÒÕÄÎÉËÁ, ÎÁ ÚÁÞÉÓÌÅÎÉÉ ËÏÔÏÒÏÇÏ ÍÙ ÂÕÄÅÍ ÐÒÏ×ÅÒÑÔØ ÄÅÊÓÔ×ÉÅ ÔÒÉÇÇÅÒÁ:

INSERT INTO employee VALUES (7777777777, 'ôÅÓÔÏ×ÙÊ','ôÅÓÔ', 'ôÅÓÔÏ×ÉÞ', '01.09.2001', 'ÕÌ.ëÏÎÔÒÏÌØÎÁÑ,1,Ë×.1', 777777);

ðÒÏ×ÅÄÅÍ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏÅ ÉÓÓÌÅÄÏ×ÁÎÉÅ ÎÁÛÅÊ âä ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ×ÙÑÓÎÉÔØ, × ËÁËÏÊ ÏÔÄÅÌ É ÎÁ ËÁËÕÀ ÄÏÌÖÎÏÓÔØ ÎÁÍ ÎÕÖÎÏ ÚÁÞÉÓÌÑÔØ ÎÏ×ÏÇÏ ÓÏÔÒÕÄÎÉËÁ, ÞÔÏÂÙ ÐÒÏ×ÅÒÉÔØ ÂÉÚÎÅÓ-ÐÒÁ×ÉÌÁ, ÚÁÄÁ×ÁÅÍÙÅ ÔÒÉÇÇÅÒÏÍ.
äÌÑ ÜÔÏÇÏ:

  1. ÷ÙÂÅÒÅÍ ÐÏ ËÁÖÄÏÍÕ ÏÔÄÅÌÕ ÌÉÍÉÔ ÚÁÒÐÌÁÔÙ ÏÔÄÅÌÁ É ÓÕÍÍÕ ÒÅÁÌØÎÙÈ ÚÁÒÐÌÁÔ ÓÏÔÒÕÄÎÉËÏ× ÏÔÄÅÌÁ:
    SELECT department.dep_id, salary_limit, s1
      FROM department,
         (SELECT dep_id, SUM(salary) AS s1
             FROM staff, work
             where staff.staff_id=work.staff_id
             GROUP BY dep_id) t1
      WHERE department.dep_id=t1.dep_id
      ORDER BY 1;
    
       DEP_ID SALARY_LIMIT        S1
    --------- ------------ ---------
           10        28500     28900
           20        10500      8300
           30        22000     17900
           40        16000     10400
           50        26500     16200
           60        18500     17200
           70         2200     16500
           80        13000     10300
           90        12500     12600
    
    (ðÒÉ×ÅÄÅÎÁ ×ÙÂÏÒËÁ, ÐÏÌÕÞÅÎÎÁÑ × Oracle, ÒÅÚÕÌØÔÁÔÙ ÔÏÇÏ ÖÅ ÚÁÐÒÏÓÁ ÄÌÑ DB2 ÁÎÁÌÏÇÉÞÎÙ)

    éÚ ÐÏÌÕÞÅÎÎÏÊ ×ÙÂÏÒËÉ ÍÙ ×ÉÄÉÍ, ÞÔÏ × ÏÔÄÅÌÅ 60 ÉÍÅÅÔÓÑ ÎÅÂÏÌØÛÏÊ "ÎÅÄÏÒÁÓÈÏÄ" ÆÏÎÄÁ ÚÁÒÐÌÁÔÙ. åÓÌÉ ××ÅÓÔÉ × ÜÔÏÔ ÏÔÄÅÌ ÎÏ×ÏÇÏ ÓÏÔÒÕÄÎÉËÁ Ó ÚÁÒÐÌÁÔÏÊ ÎÅ ÂÏÌÅÅ 1300, ÔÏ ÕÓÌÏ×ÉÅ ÏÇÒÁÎÉÞÅÎÉÑ ÐÏ ÚÁÒÐÌÁÔÅ, ÚÁÄÁ×ÁÅÍÏÅ ÔÒÉÇÇÅÒÏÍ, ×ÙÐÏÌÎÑÔØÓÑ ÎÅ ÂÕÄÅÔ; ÅÓÌÉ ÖÅ ÚÁÒÐÌÁÔÁ ÎÏ×ÏÇÏ ÓÏÔÒÕÄÎÉËÁ ÂÕÄÅÔ ÂÏÌØÛÅ 1300, ÔÏ ÔÒÉÇÇÅÒ ÎÅ ÐÏÚ×ÏÌÉÔ ××ÅÓÔÉ ÔÁËÏÅ ÎÁÚÎÁÞÅÎÉÅ.

  2. ÷ÙÂÅÒÅÍ ÐÏ ËÁÖÄÏÊ ÄÏÌÖÎÏÓÔÉ ÛÔÁÔÎÏÇÏ ÒÁÓÐÉÓÁÎÉÑ ÄÌÑ ÏÔÄÅÌÁ 60 ËÏÌÉÞÅÓÔ×Ï ÓÔÁ×ÏË ÐÏ ÛÔÁÔÎÏÍÕ ÒÁÓÐÉÓÁÎÉÀ É ÒÅÁÌØÎÏÅ ËÏÌÉÞÅÓÔ×Ï ÓÔÁ×ÏË ÄÌÑ ÄÁÎÎÏÊ ÄÏÌÖÎÏÓÔÉ:
    SELECT staff.staff_id, staff.rate, s1
       FROM staff,
          (SELECT staff_id, SUM(rate) AS s1
              FROM work
              GROUP BY staff_id) t1
       WHERE staff.staff_id=t1.staff_id
       AND dep_id=60
       ORDER BY 1;
    STAFF_ID      RATE        S1
    --------- --------- ---------
          601         1         1
          602         1         1
          603         6         4
    

    ÷ ÏÔÄÅÌÅ 60 ÉÍÅÅÔÓÑ ÒÅÚÅÒ× ÓÔÁ×ÏË ÐÏ ÄÏÌÖÎÏÓÔÉ 603. åÓÌÉ ÎÏ×ÙÊ ÓÏÔÒÕÄÎÉË ÂÕÄÅÔ ÐÏÌÕÞÁÔØ ÏÄÎÕ ÓÔÁ×ËÕ ÐÏ ÄÏÌÖÎÏÓÔÉ 603, ÔÏ ÕÓÌÏ×ÉÅ ÏÇÒÁÎÉÞÅÎÉÑ ÐÏ ÛÔÁÔÎÏÍÕ ÒÁÓÐÉÓÁÎÉÀ, ÚÁÄÁ×ÁÅÍÏÅ ÔÒÉÇÇÅÒÏÍ, ×ÙÐÏÌÎÑÔØÓÑ ÎÅ ÂÕÄÅÔ; ÅÓÌÉ ÖÅ ÎÏ×ÏÇÏ ÓÏÔÒÕÄÎÉËÁ ÎÁÚÎÁÞÉÔØ ÎÁ ÄÏÌÖÎÏÓÔÉ 601 ÉÌÉ 602, ÔÏ ÔÒÉÇÇÅÒ ÎÅ ÐÏÚ×ÏÌÉÔ ××ÅÓÔÉ ÔÁËÏÅ ÎÁÚÎÁÞÅÎÉÅ.


éÔÁË, ÔÅÓÔÏ×ÙÅ ÚÁÐÒÏÓÙ:


òÅÚÕÌØÔÁÔÙ ×ÙÐÏÌÎÅÎÉÑ - Oracle
SQL> INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
  2     VALUES (7777777777, 602, 10000, '01-SEP-2001', 1);
INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
            *
ERROR at line 1:
ORA-20777: Rate limitation
ORA-06512: at "U1.T1", line 14
ORA-04088: error during execution of trigger 'U1.T1'

SQL> INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
  2     VALUES (7777777777, 603, 2000, '01-SEP-2001', 1);
INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
            *
ERROR at line 1:
ORA-20777: Salary limitation
ORA-06512: at "U1.T1", line 37
ORA-04088: error during execution of trigger 'U1.T1'

SQL> INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
  2     VALUES (7777777777, 603, 1000, '01-SEP-2001', 1);

1 row created.

òÅÚÕÌØÔÁÔÙ ×ÙÐÏÌÎÅÎÉÑ - DB2
------------------------------ Command Entered ------------------------------
INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
   VALUES (7777777777, 602, 10000, '01.09.2001', 1) ;
-----------------------------------------------------------------------------
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0438N  Application raised error with diagnostic text: "Rate/salary 
limitation".  SQLSTATE=75000

------------------------------ Command Entered ------------------------------
INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
   VALUES (7777777777, 603, 2000, '01.09.2001', 1) ;
-----------------------------------------------------------------------------
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0438N  Application raised error with diagnostic text: "Rate/salary 
limitation".  SQLSTATE=75000

------------------------------ Command Entered ------------------------------
INSERT INTO work (empl_id, staff_id, salary, start_date, rate)
   VALUES (7777777777, 603, 1000, '01.09.2001', 1) ;
-----------------------------------------------------------------------------
DB20000I  The SQL command completed successfully.

îÁÚÁÄ÷ÐÅÒÅÄ
ëÁÔÁÌÏÇïÇÌÁ×ÌÅÎÉÅéÎÄÅËÓ ÒÁÚÄÅÌÁ