SQLWKS> drop table teacher;
语句已处理。
SQLWKS> 
SQLWKS> create table teacher(
     2> tno number(4) primary key,
     3> tname varchar2(10) not null,
     4> tage number(2) constraint t1 check(tage between 20 and 70),
     5> pos varchar2(10),
     6> sal number(8,2) constraint t2 check (sal>500),
     7> pri number(8,2));
语句已处理。
SQLWKS> 
SQLWKS> create or replace trigger updsal1
     2> before insert or update of sal,pos on teacher
     3> for each row
     4> when(new.pos='教授')
     5> begin
     6> if new.sal<1000 then new.sal=1000;
     7> end if;
     8> end;
     9> 
    10> insert into teacher values(8001,'t1',35,'助教',800,200);
    11> insert into teacher values(8002,'t2',38,'讲师',1000,200);
    12> insert into teacher values(8003,'t3',45,'教授',1800,200);
    13> insert into teacher values(8004,'t4',65,'助教',800,200);
    14> insert into teacher values(8005,'t5',55,'讲师',890,200);
    15> insert into teacher values(8006,'t6',35,'教授',800,200);
    16> 
    17> select *from teacher;
    18> 
MGR-00072: There is no more information about this error.最后一句那个MGR-00072的错误是怎么回事啊,程序过不去啊。。
忘望教导。。

解决方案 »

  1.   

    SQLWKS> create or replace trigger updsal1
      2> before insert or update of sal,pos on teacher
      3> for each row
      4> when(new.pos='教授')
      5> begin
      6> if new.sal<1000 then new.sal=1000;
      7> end if;
      8> end;
      9>  /在命令行编译trigger,procedure,function等,需要在代码之后增加"/"
    sqlplus的 "/" 表示执行
      

  2.   

    实测数据:create table T88
    (
        tno number(4) primary key,
        tname varchar2(10) not null,
        tage number(2) constraint t1 check(tage between 20 and 70),
        pos varchar2(10),
        sal number(8,2) constraint t2 check (sal>500),
        pri number(8,2)
    );insert into T88 values(8001,'t1',35,'助教',800,200);
    insert into T88 values(8002,'t2',38,'讲师',1000,200);
    insert into T88 values(8003,'t3',45,'教授',1800,200);
    insert into T88 values(8004,'t4',65,'助教',800,200);
    insert into T88 values(8005,'t5',55,'讲师',890,200);
    insert into T88 values(8006,'t6',35,'教授',800,200);
    触发器:CREATE OR REPLACE TRIGGER updsal1
    BEFORE INSERT OR UPDATE OF pos, sal ON T88
    FOR EACH ROW 
    WHEN (NEW.pos = '教授')
    BEGIN
        IF :NEW.sal < 1000 THEN
            :NEW.sal := 1000;
        END IF;
    END;
    实测结果:(已经将插入的职位为教授的记录,工资<1000,调整为1000