Oracle

来源:这里教程网 时间:2026-03-03 14:31:14 作者:

SQL> --包的重载 SQL> create function to_char(id number) return varchar2(11);   2  / Warning: Function created with compilation errors. SQL> create or replace get_sal(A IN number) return number   2  is   3   SQL> create or replace get_sal(A IN number) return number   2  is   3  begin   4    selecr sal into vsal from emp where empno=A; create or replace get_sal(A IN number) return number                   * ERROR at line 1: ORA-00922: missing or invalid option  SQL> create or replace get_sal(A IN number) return number   2  is   3   vsal number; create or replace get_sal(A IN number) return number                   * ERROR at line 1: ORA-00922: missing or invalid option  SQL> create or replace get_sal(A IN number) return number   2  is   3     vsal number; create or replace get_sal(A IN number) return number                   * ERROR at line 1: ORA-00922: missing or invalid option  SQL> create or replace get_sal(A IN number) return number   2  is   3  / create or replace get_sal(A IN number) return number                   * ERROR at line 1: ORA-00922: missing or invalid option  SQL> create package body pack2   2  is function get_sal( IN number) return number   3  is   4         vsal number;   5  begin   6     select sal into vsal from emp where empno=A;   7     return vsal;   8  end;   9    10  / Warning: Package Body created with compilation errors. SQL> ed Wrote file afiedt.buf   1  create package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where empno=A;   8     return vsal;   9  end;  10   function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end;  25  / create package body pack2                     * ERROR at line 1: ORA-00955: name is already used by an existing object  SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where empno=A;   8     return vsal;   9  end;  10   function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where empno=A;   8     return vsal;   9  end;  10   function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where empno=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end;  25  / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where ename=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where ename=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where empno=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> d SP2-0042: unknown command "d" - rest of line ignored. SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where ename=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where hiredate=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where ename=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where hiredate=A;  22          return vsal;  23      end;  24* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       0/0      PL/SQL: Compilation unit analysis terminated                            1/14     PLS-00201: identifier 'PACK2' must be declared                          1/14     PLS-00304: cannot compile body of 'PACK2' without its                            specification                                                                                                                                            SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3   function get_sal(A  IN number) return number   4  is   5         vsal number;   6  begin   7     select sal into vsal from emp where ename=A;   8     return vsal;   9  end;  10  function get_sal(A  IN varchar2) return number  11     is       12            vsal number;  13     begin  14        select sal into vsal from emp where empno=A;  15        return vsal;  16    end;  17  function get_sal(A  IN date) return number  18       is        19              vsal number;  20       begin  21          select sal into vsal from emp where hiredate=A;  22          return vsal;  23      end;  24* end; SQL> create or replace package body pack2   2  is   3  begin   4  function get_sal(A IN number) return number;   5  fuction  get_sal(A IN varchar2)retunr number;   6  function get_sal(A IN hiredate)return number;   7  end;   8  / Warning: Package Body created with compilation errors. SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3  begin   4  function get_sal(A IN number) return number;   5  function get_sal(A IN varchar2)return number;   6  function get_sal(A IN hiredate)return number;   7* end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       4/10     PLS-00103: Encountered the symbol "GET_SAL" when expecting one of                the following:                                                                   := . ( @ % ;                                                                                                                                             SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2  is   3  function get_sal(A IN number) return number;   4  function get_sal(A IN varchar2)return number;   5  function get_sal(A IN hiredate)return number;   6* end;   7     8  //   9  / Warning: Package Body created with compilation errors. SQL> ed Wrote file afiedt.buf   1  create or replace package  pack2   2  is   3  function get_sal(A IN number) return number;   4  function get_sal(A IN varchar2)return number;   5  function get_sal(A IN hiredate)return number;   6* end;   7  / Warning: Package created with compilation errors. SQL> show error; Errors for PACKAGE PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       5/1      PL/SQL: Declaration ignored                                             5/23     PLS-00201: identifier 'HIREDATE' must be declared                       SQL> ed Wrote file afiedt.buf   1  create or replace package  pack2   2  is   3  function get_sal(A IN number) return number;   4  function get_sal(A IN varchar2)return number;   5  function get_sal(A IN date)return number;   6* end; SQL> / Package created. SQL> ed Wrote file afiedt.buf   1  te or replace package body pack2   2      is   3       function get_sal(A  IN number) return number   4      is   5        vsal number;   6      begin   7    select sal into vsal from emp where ename=A;   8    return vsal;   9      end;  10     function get_sal(A  IN varchar2) return number  11    is  12           vsal number;  13    begin  14       select sal into vsal from emp where empno=A;  15       return vsal;  16       end;  17     function get_sal(A  IN date) return number  18      is  19    vsal number;  20      begin  21         select sal into vsal from emp where hiredate=A;  22         return vsal;  23    end;  24*   end;  25  / te or replace package body pack2 * ERROR at line 1: ORA-00900: invalid SQL statement  SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2      is   3       function get_sal(A  IN number) return number   4      is   5        vsal number;   6      begin   7    select sal into vsal from emp where ename=A;   8    return vsal;   9      end;  10     function get_sal(A  IN varchar2) return number  11    is  12           vsal number;  13    begin  14       select sal into vsal from emp where empno=A;  15       return vsal;  16       end;  17     function get_sal(A  IN date) return number  18      is  19    vsal number;  20      begin  21         select sal into vsal from emp where hiredate=A;  22         return vsal;  23    end;  24*   end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       7/4      PL/SQL: SQL Statement ignored                                           7/30     PL/SQL: ORA-00942: table or view does not exist                         14/6     PL/SQL: SQL Statement ignored                                           14/32    PL/SQL: ORA-00942: table or view does not exist                         21/8     PL/SQL: SQL Statement ignored                                           21/34    PL/SQL: ORA-00942: table or view does not exist                         SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2      is   3       function get_sal(A  IN number) return number   4      is   5        vsal number;   6      begin   7    select sal into vsal from emp where ename=A;   8    return vsal;   9      end;  10     function get_sal(A  IN varchar2) return number  11    is  12           vsal number;  13    begin  14       select sal into vsal from emp where empno=A;  15       return vsal;  16       end;  17     function get_sal(A  IN date) return number  18      is  19    vsal number;  20      begin  21         select sal into vsal from emp where hiredate=A;  22         return vsal;  23    end;  24*   end; SQL> / Warning: Package Body created with compilation errors. SQL> show error; Errors for PACKAGE BODY PACK2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       7/4      PL/SQL: SQL Statement ignored                                           7/30     PL/SQL: ORA-00942: table or view does not exist                         14/6     PL/SQL: SQL Statement ignored                                           14/32    PL/SQL: ORA-00942: table or view does not exist                         21/8     PL/SQL: SQL Statement ignored                                           21/34    PL/SQL: ORA-00942: table or view does not exist                         SQL> ed Wrote file afiedt.buf   1  create or replace package body pack2   2      is   3       function get_sal(A  IN number) return number   4      is   5        vsal number;   6      begin   7    select sal into vsal from scott.emp where ename=A;   8    return vsal;   9      end;  10     function get_sal(A  IN varchar2) return number  11    is  12           vsal number;  13    begin  14       select sal into vsal from scott.emp where empno=A;  15       return vsal;  16       end;  17     function get_sal(A  IN date) return number  18      is  19    vsal number;  20      begin  21         select sal into vsal from scott.emp where hiredate=A;  22         return vsal;  23    end;  24*   end; SQL> / Package body created. SQL> --3。调用方式 SQL> select get_sal(7839)  from dual; select get_sal(7839)  from dual        * ERROR at line 1: ORA-00904: "GET_SAL": invalid identifier  SQL> select get_sal(7839)  from dual; select get_sal(7839)  from dual        * ERROR at line 1: ORA-00904: "GET_SAL": invalid identifier  SQL> select get_sal('20172512 ')  from dual; select get_sal('20172512 ')  from dual        * ERROR at line 1: ORA-00904: "GET_SAL": invalid identifier  SQL> --触发器 SQL> --1.创建触发器 SQL> create or replace trigger tr1   2  before insert on emp   3  declare   4  begin   5     raise_application_error(-20001,'can not insert ! ');   6  end;   7  / before insert on emp                  * ERROR at line 2: ORA-00942: table or view does not exist  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1   2  before insert on scott.emp   3  declare   4  begin   5     raise_application_error(-20001,'can not insert ! ');   6* end; SQL> / Trigger created. SQL> insert into emp(empno) values (123); insert into emp(empno) values (123)             * ERROR at line 1: ORA-00942: table or view does not exist  SQL> insert into scott.emp(empno) values (123); insert into scott.emp(empno) values (123)                   * ERROR at line 1: ORA-20001: can not insert !  ORA-06512: at "SYS.TR1", line 3  ORA-04088: error during execution of trigger 'SYS.TR1'  SQL> --2.阻止对emp 表进行CRUD SQL> create or replace trigger NotCRUD   2  before insert on scott.emp   3  declare   4  begin   5    raise_application_error(-2003,'Not insert!');   6  end;   7  / Trigger created. SQL> ed Wrote file afiedt.buf   1  create or replace trigger NotCRUD   2  before insert or update or delete on scott.emp   3  declare   4  begin   5    raise_application_error(-2003,'Not insert!');   6* end; SQL> / Trigger created. SQL> --3。插入操作 SQL> --3.1 小心删除,小心删除 SQL> ---逻辑组合 SQL>  SQL> create or replace trigger tr1 before insert or update or delete on emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10  end if;  11  / create or replace trigger tr1 before insert or update or delete on emp                                                                    * ERROR at line 1: ORA-00942: table or view does not exist  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.mp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10* end if; SQL> / create or replace trigger tr1 before insert or update or delete on scott.mp                                                                          * ERROR at line 1: ORA-00942: table or view does not exist  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10* end if; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       5/8      PLS-00103: Encountered the symbol "UPDATING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             7/8      PLS-00103: Encountered the symbol "DELETING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             9/7      PLS-00103: Encountered the symbol "end-of-file" when expecting                   one of the following:                                                            ( begin case declare else elsif end exit for goto if loop mod           LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------                null pragma raise return select update while with                                <an identifier> <a double-quoted delimited-identifier>                           <a bind variable> << continue close current delete fetch lock                    insert open rollback savepoint set sql execute commit forall                     merge pipe purge                                                                                                                                         SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10* end if; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       5/8      PLS-00103: Encountered the symbol "UPDATING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             7/8      PLS-00103: Encountered the symbol "DELETING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             9/7      PLS-00103: Encountered the symbol "end-of-file" when expecting                   one of the following:                                                            ( begin case declare else elsif end exit for goto if loop mod           LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------                null pragma raise return select update while with                                <an identifier> <a double-quoted delimited-identifier>                           <a bind variable> << continue close current delete fetch lock                    insert open rollback savepoint set sql execute commit forall                     merge pipe purge                                                                                                                                         SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10* end if; SQL> / Warning: Trigger created with compilation errors. SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       5/8      PLS-00103: Encountered the symbol "UPDATING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             7/8      PLS-00103: Encountered the symbol "DELETING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             9/7      PLS-00103: Encountered the symbol "end-of-file" when expecting                   one of the following:                                                            ( begin case declare else elsif end exit for goto if loop mod           LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------                null pragma raise return select update while with                                <an identifier> <a double-quoted delimited-identifier>                           <a bind variable> << continue close current delete fetch lock                    insert open rollback savepoint set sql execute commit forall                     merge pipe purge                                                                                                                                         SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elseif updating  then   7   dbms_output.put_line('updating');   8  elseif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10  end if;  11* end;  12  / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       5/8      PLS-00103: Encountered the symbol "UPDATING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             7/8      PLS-00103: Encountered the symbol "DELETING" when expecting one                  of the following:                                                                := . ( @ % ;                                                                                                                                             10/4     PLS-00103: Encountered the symbol ";" when expecting one of the                  following:                                                                       if                                                                      LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------                                                                                        SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before insert or update or delete on scott.emp   2  declare   3  begin   4        if inserting then   5   dbms_output.put_line('welcome');   6  elsif updating  then   7   dbms_output.put_line('updating');   8  elsif deleting  then   9     raise_application_error(-20001,'can not execute DML!');  10  end if;  11* end; SQL> / Trigger created. SQL> ----------demo03 SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr2  after delete on emp   2  for each row   3  declare   4  begin   5    dbms_out.put_line('--deleting---- ');   6* end;   7  / create or replace trigger tr2  after delete on emp                                                * ERROR at line 1: ORA-00942: table or view does not exist  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr2  after delete on scott.emp   2  for each row   3  declare   4  begin   5    dbms_out.put_line('--deleting---- ');   6* end; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR2: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       3/3      PL/SQL: Statement ignored                                               3/3      PLS-00201: identifier 'DBMS_OUT.PUT_LINE' must be declared              SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr2  after delete on scott.emp   2  for each row   3  declare   4  begin   5    dbms_output.put_line('--deleting---- ');   6* end; SQL> / Trigger created. SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3  after delete on scott.emp   2  declare   3  begin   4    dbms_output.put_line('--after----table ');   5* end; SQL> / Trigger created. SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3  after delete on scott.emp   2  declare   3  begin   4    dbms_output.put_line('--after----table ');   5* end; SQL> delete from scott.emp where ename='KING'   2  / delete from scott.emp where ename='KING'                   * ERROR at line 1: ORA-21000: error number argument to raise_application_error of -2003 is out of  range  ORA-06512: at "SYS.NOTCRUD", line 3  ORA-04088: error during execution of trigger 'SYS.NOTCRUD'  SQL> drop trigger NOTCRUD   2  / Trigger dropped. SQL> delete from scott.emp where ename='KING'   2  / delete from scott.emp where ename='KING'                   * ERROR at line 1: ORA-20001: can not execute DML!  ORA-06512: at "SYS.TR1", line 8  ORA-04088: error during execution of trigger 'SYS.TR1'  SQL> drop trigger TR1   2  / Trigger dropped. SQL> delete from scott.emp where ename='KING'   2  / --deleting----                                                                   --after----table                                                                 1 row deleted. SQL> --4.证明表级所和行级锁 SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 after insert or update or delete on emp   2  for each row   3  declare    4  begin    5    if updating then   6             insert into zz values (sysdate,'EMP','U',:old.sal,:new.sal);   7   end if;   8* end;   9  / create or replace trigger tr1 after insert or update or delete on emp                                                                   * ERROR at line 1: ORA-00942: table or view does not exist  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 after insert or update or delete on scott.emp   2  for each row   3  declare    4  begin    5    if updating then   6             insert into zz values (sysdate,'EMP','U',:old.sal,:new.sal);   7   end if;   8* end; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       4/12     PL/SQL: SQL Statement ignored                                           4/24     PL/SQL: ORA-00942: table or view does not exist                         SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 after insert or update or delete on scott.emp   2  for each row   3  declare    4  begin    5    if updating then   6             insert into zz values (sysdate,'EMP','U',:old.sal,:new.sal);   7   end if;   8* end; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       4/12     PL/SQL: SQL Statement ignored                                           4/24     PL/SQL: ORA-00942: table or view does not exist                         SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 after insert or update or delete on scott.emp   2  for each row   3  declare    4  begin    5    if updating then   6             insert into zz values (sysdate,'EMP','U',:old.sal,:new.sal);   7   end if;   8* end; SQL> conn / as  sysdba; Connected. SQL> grant create view to scott; Grant succeeded. SQL> conn scott/tiger; Connected. SQL> create or replace view  v1 as select dept.deptno,empno,ename,loc   2  from emp.dept   3  where emp.dept=dept.deptno; from emp.dept          * ERROR at line 2: ORA-00942: table or view does not exist  SQL> create or replace view  v1 as select dept.deptno,empno,ename,loc   2  from emp,dept   3  where emp.dept=dept.deptno; where emp.dept=dept.deptno       * ERROR at line 3: ORA-00904: "EMP"."DEPT": invalid identifier  SQL> create or replace view  v1 as select dept.deptno,empno,ename,loc   2  from emp,dept   3  where emp.deptno=dept.deptno; View created. SQL> / View created. SQL> select * from v1;     DEPTNO      EMPNO ENAME      LOC                                             ---------- ---------- ---------- -------------                                           10       7782 CLARK      NEW YORK                                                10       7934 MILLER     NEW YORK                                                20       7788 nihao      DALLAS                                                  20       7902 FORD       DALLAS                                                  20       7876 ADAMS      DALLAS                                                  20       7369 SMITH      DALLAS                                                  20       7566 JONES      DALLAS                                                  30       7900 JAMES      CHICAGO                                                 30       7844 TURNER     CHICAGO                                                 30       7698 BLAKE      CHICAGO                                                 30       7654 MARTIN     CHICAGO                                             DEPTNO      EMPNO ENAME      LOC                                             ---------- ---------- ---------- -------------                                           30       7499 ALLEN      CHICAGO                                                 30       7521 WARD       CHICAGO                                         13 rows selected. SQL> insert into v1 values(50,999,'C','BJ'); insert into v1 values(50,999,'C','BJ') * ERROR at line 1: ORA-01779: cannot modify a column which maps to a non key-preserved table  SQL> create or replace trigger tr4 instead of insert on v1   2  declare   3  begin   4   insert into dept(deptno,loc) values (new.deptno,:new.loc);   5   insert into emp(deptno,empno,ename)values (:new.deptno,:new.empno,:new.ename);   6  end;   7  / Warning: Trigger created with compilation errors. SQL> show error Errors for TRIGGER TR4: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       3/2      PL/SQL: SQL Statement ignored                                           3/43     PL/SQL: ORA-00984: column not allowed here                              SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr4 instead of insert on v1   2  declare   3  begin   4   insert into dept(deptno,loc) values (:new.deptno,:new.loc);   5   insert into emp(deptno,empno,ename)values (:new.deptno,:new.empno,:new.ename);   6* end; SQL> / Trigger created. SQL> insert into v1 values(50,999,'C','BJ'); insert into v1 values(50,999,'C','BJ')             * ERROR at line 1: ORA-04098: trigger 'SYS.TR1' is invalid and failed re-validation  ORA-06512: at "SCOTT.TR4", line 4  ORA-04088: error during execution of trigger 'SCOTT.TR4'  SQL> drop trigger tr1; drop trigger tr1 * ERROR at line 1: ORA-04080: trigger 'TR1' does not exist  SQL> drop trigger TR1   2  / drop trigger TR1 * ERROR at line 1: ORA-04080: trigger 'TR1' does not exist  SQL> insert into v1 values(50,999,'C','BJ');\   2  / insert into v1 values(50,999,'C','BJ');\                                       * ERROR at line 1: ORA-00911: invalid character  SQL> insert into v1 values(50,999,'C','BJ'); insert into v1 values(50,999,'C','BJ')             * ERROR at line 1: ORA-04098: trigger 'SYS.TR1' is invalid and failed re-validation  ORA-06512: at "SCOTT.TR4", line 4  ORA-04088: error during execution of trigger 'SCOTT.TR4'  SQL> insert into v1 values(50,999,'C','BJ'); insert into v1 values(50,999,'C','BJ') * ERROR at line 1: ORA-04098: trigger 'SYS.TR1' is invalid and failed re-validation  ORA-06512: at "SCOTT.TR4", line 4  ORA-04088: error during execution of trigger 'SCOTT.TR4'  SQL> drop trigger TR1   2  / drop trigger TR1 * ERROR at line 1: ORA-04080: trigger 'TR1' does not exist  SQL> insert into v1 values(50,999,'C','BJ'); insert into v1 values(50,999,'C','BJ') * ERROR at line 1: ORA-04098: trigger 'SYS.TR1' is invalid and failed re-validation  ORA-06512: at "SCOTT.TR4", line 4  ORA-04088: error during execution of trigger 'SCOTT.TR4'  SQL> show user; USER is "SCOTT" SQL> conn / as sysdba; Connected. SQL> drop trigger TR1   2   SQL> drop trigger TR1   2  / Trigger dropped. SQL> conn scott/tiger; Connected. SQL> insert into v1 values(50,999,'C','BJ'); 1 row created. SQL> create or replace trigger tr4 instead of insert on v1   2   insert into dept(deptno,loc) values (new.deptno,:new.loc);   3   insert into emp(deptno,empno,ename)values (:new.deptno,:new.empno,:new.ename);   4  / Warning: Trigger created with compilation errors. SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr4 instead of insert on v1   2*   if inserting then   3  /   if inserting then   * ERROR at line 2: ORA-04079: invalid trigger specification  SQL> 04.系统触发器 SP2-0734: unknown command beginning "04.系统议." - rest of line ignored. SQL> --04.系统触发器 SQL> --用户,DDL SQL> --数据库 SQL> --01.阻止scott 用户执行drop 语句 SQL> create or replace trigger tr1 before drop on scott.schema   2  declare   3  begin   4    raise_application_error(-20001,'cat not  drop');   5  end;   6  / Trigger created. SQL> show user; USER is "SCOTT" SQL> drop trigger tr1   2  / Trigger dropped. SQL> create or replace trigger tr1 before drop on scott.schema   2  begin   3    raise_application_error(-20001,'can not drop');   4  end;   5  / Trigger created. SQL> drop table emp; drop table emp * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1  ORA-20001: can not drop  ORA-06512: at line 2  SQL> create or replace trigger tr1 before drop on scott.schema   2  begin   3    raise_application_error(-20001,'你不能删除我呀^--^);   4  end;   5  / Warning: Trigger created with compilation errors. SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr1 before drop on scott.schema   2  begin   3    raise_application_error(-20001,'你不能删除我呀^--^');   4* end; SQL> / Trigger created. SQL> drop table emp   2  / drop table emp * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1  ORA-20001: ?????????????????????^--^  ORA-06512: at line 2  SQL> ed Wrote file afiedt.buf SP2-0223: No lines in SQL buffer.   1  / SQL> create or replace trigger tr1 before drop on scott.schema   2  begin   3    raise_application_error(-20001,'你不能删除我呀^--^);   4  end;   5  / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       2/34     PLS-00103: Encountered the symbol "?????????????????????^" when                  expecting one of the following:                                                  ( - + case mod new not null <an identifier>                                      <a double-quoted delimited-identifier> <a bind variable>                         continue avg count current exists max min prior sql stddev                       sum variance execute forall merge time timestamp interval                        date <a string literal with character set specification>                         <a number> <a single-quoted SQL string> pipe                                     <an alternatively-quoted string                                                                                                                          SQL> show errors; Errors for TRIGGER TR1: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       2/34     PLS-00103: Encountered the symbol "?????????????????????^" when                  expecting one of the following:                                                  ( - + case mod new not null <an identifier>                                      <a double-quoted delimited-identifier> <a bind variable>                         continue avg count current exists max min prior sql stddev                       sum variance execute forall merge time timestamp interval                        date <a string literal with character set specification>                         <a number> <a single-quoted SQL string> pipe                                     <an alternatively-quoted string                                                                                                                          SQL> host cls SQL> alter table zz add(vtype varchar2(20),vname varchar2(20)); alter table zz add(vtype varchar2(20),vname varchar2(20)) * ERROR at line 1: ORA-00942: table or view does not exist  SQL> create table (vtype varchar2(20),vname varchar2(20)); create table (vtype varchar2(20),vname varchar2(20))              * ERROR at line 1: ORA-00903: invalid table name  SQL> create table  ztable(vtype varchar2(20),vname varchar2(20)); Table created. SQL>  SQL> create table  zz(vtype varchar2(20),vname varchar2(20)); Table created. SQL> create or replace trigger tr3 after logon on database   2  declare   3  begin   4    if ora_login_user='SCOTT' THEN   5        raise_application_error('-2000','哈哈哈,就不让你登');   6    END IF;   7  END;   8  / create or replace trigger tr3 after logon on database                                              * ERROR at line 1: ORA-01031: insufficient privileges  SQL> CONN / ERROR: ORA-01017: invalid username/password; logon denied  Warning: You are no longer connected to ORACLE. SQL> conn as sysdba; Enter user-name: sys Connected. SQL> create or replace trigger tr3 after logon on database   2  declare   3    if ora_login_user='SCOTT' THEN   4        raise_application_error('-2000','哈哈哈,就不让你登');   5  end if;   6  end;   7  / create or replace trigger tr3 after logon on database                           * ERROR at line 1: ORA-04095: trigger 'TR3' already exists on another table, cannot replace it  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3333 after logon on database   2  declare   3    if ora_login_user='SCOTT' THEN   4        raise_application_error('-2000','哈哈哈,就不让你登');   5  end if;   6* end; SQL> / Warning: Trigger created with compilation errors. SQL> show error; Errors for TRIGGER TR3333: LINE/COL ERROR                                                                   -------- -----------------------------------------------------------------       2/3      PLS-00103: Encountered the symbol "IF" when expecting one of the                 following:                                                                       begin function pragma procedure subtype type <an identifier>                     <a double-quoted delimited-identifier> current cursor delete                     exists prior                                                                     The symbol "begin" was substituted for "IF" to continue.                                                                                                 SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3333 after logon on database   2  declare   3  begin   4    if ora_login_user='SCOTT' THEN   5        raise_application_error('-2000','哈哈哈,就不让你登');   6  end if;   7* end; SQL> / Trigger created. SQL> conn  scott/tiger; ERROR: ORA-00604: error occurred at recursive SQL level 1  ORA-21000: error number argument to raise_application_error of -2000 is out of  range  ORA-06512: at line 4  Warning: You are no longer connected to ORACLE. SQL> conn  scott/tiger; ERROR: ORA-00604: error occurred at recursive SQL level 1  ORA-21000: error number argument to raise_application_error of -2000 is out of  range  ORA-06512: at line 4  SQL> conn  scott/tiger; ERROR: ORA-00604: error occurred at recursive SQL level 1  ORA-21000: error number argument to raise_application_error of -2000 is out of  range  ORA-06512: at line 4  SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3333 after logon on database   2  declare   3  begin   4    if ora_login_user='SCOTT' THEN   5        raise_application_error('-!!!!2000','哈哈哈i,就不让你登');   6  end if;   7* end; SQL> / SP2-0640: Not connected SQL> / SP2-0640: Not connected SQL> ed Wrote file afiedt.buf   1  create or replace trigger tr3333 after logon on database   2  declare   3  begin   4    if ora_login_user='SCOTT' THEN   5        raise_application_error('2000','哈哈哈i,就不让你登~~> ^0-0 ^<~~ '

相关推荐