shutdown immediate
ORA-01097: 无法在事务处理过程中关闭 - 请首先提交或回退

解决:先 "commit"


实验四

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 18 19:32:00 2016

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  system
输入口令: 连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> connect / as sysdba
已连接。 SQL> /
输入 str 的值: 20110002
原值 5: v_no := &str;
新值 5: v_no := 20110002; PL/SQL 过程已成功完成。 SQL> set serveroutput on SQL> /
输入 str 的值: 20110002
原值 5: v_no := &str;
新值 5: v_no := 20110002;
马力 PL/SQL 过程已成功完成。 SQL> insert into t_student(Sno,Sname,sbirthday) values(20110002,'马力',TO_DATE('1991-02-21','YYYY-MM-DD')); 已创建 1 行。 SQL> / 已创建 1 行。 SQL> edit
已写入 file afiedt.buf 1 declare
2 v_score t_score.score%type;
3 begin
4 select score into v_score from t_score where sno=20100002 and Sub_no=001;
5 case
6 when v_score<81 then v_score:=v_score+8;
7 when v_score<91 then v_score:=v_score+5;
8 when v_score<97 then v_score:=v_score+3;
9 end case;
10 update t_score set score=v_score where sno=20100002 and Sub_no=001;
11* end;
12 / PL/SQL 过程已成功完成。 SQL> select * from t_score where sno = 20100002 and Sub_no=001; SNO SUB_NO SCORE
---------- ---------- ----------
20100002 1 92 SQL> edit
已写入 file afiedt.buf 1 declare
2 v_counter binary_integer:=1;
3 begin
4 while v_counter<=100 loop
5 if mod(v_counter,3) = 0 and mod(v_counter,2)=0
6 then dbms_output.put_line(v_counter||' ');
7 end if;
8 v_counter :=v_counter+1;
9 end loop;
10* end;
SQL> /
6
12
18
24
30
36
42
48
54
60
66
72
78
84
90
96 PL/SQL 过程已成功完成。 SQL> create or replace procedure add_student(p_sno t_student.sno%type, p_sname t_student.sname%type, p_ssex t_student.ssex%type, p_sbirthday t_student.sbirthday%type)
2 as
3
4 begin
5 insert into t_student values(p_sno,p_sname,p_ssex,p_sbirthday);
6 end;
7 / 过程已创建。 SQL> execute add_student(20140001,'林蔚然',1,'15-2月-1996'); PL/SQL 过程已成功完成。 SQL> select * from t_student; SNO SNAME SSEX SBIRTHDAY
---------- ---------- ---------- --------------
20110002 马力 21-2月 -91
20100002 张杰 1 03-1月 -92
20100003 李娟 0 14-6月 -92
20110001 王强 1
20100001 刘浩 1 12-10月-91
20140001 林蔚然 1 15-2月 -96 已选择6行。 SQL> edit
已写入 file afiedt.buf 1 create or replace procedure ave(p_sno t_score.sno%type)
2 as
3 avg_score t_score.score%type;
4 begin
5 select avg(score) into avg_score from t_score where sno=p_sno;
6 dbms_output.put_line(avg_score);
7* end;
SQL> / 过程已创建。 SQL> execute ave(20100003);
86.5 PL/SQL 过程已成功完成。 SQL> edit
已写入 file afiedt.buf 1 declare
2 name t_student.sname%type;
3 no t_student.sno%type;
4 begin
5 no := &str;
6 select sname into name from t_student where sno=no;
7 dbms_output.put_line(name);
8 exception
9 when no_data_found then
10 dbms_output.put_line('data not found!');
11* end;
SQL> /
输入 str 的值: 20140001
原值 5: no := &str;
新值 5: no := 20140001;
林蔚然 PL/SQL 过程已成功完成。 SQL> /
输入 str 的值: 20140002
原值 5: no := &str;
新值 5: no := 20140002;
data not found! PL/SQL 过程已成功完成。 SQL>

实验五

SQL*Plus: Release 11.2.0.1.0 Production on 星期六 11月 19 15:19:09 2016

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  sys
输入口令:
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER 请输入用户名: system
输入口令: 连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn sys / as sysdba
输入口令:
已连接。 SQL> insert into employee values(000001,201401,'林蔚然',0); 已创建 1 行。 SQL> select * from employee; DNO ENO ENAME EWORK
---------- ---------- ---------- ----------
1 201401 林蔚然 0 SQL> insert into dept values(000001,'人事部','武汉大学'); 已创建 1 行。 SQL> select * from dept; DNO DNAME DPLACE
---------- ---------- ----------
1 人事部 武汉大学 SQL> grant create view to scott; 授权成功。 SQL> alter user scott account unlock
2 / 用户已更改。 SQL> conn scott/tiger
ERROR:
ORA-28001: the password has expired 更改 scott 的口令
新口令:
重新键入新口令:
口令已更改
已连接。
SQL> show user
USER 为 "SCOTT" SQL> conn sys / as sysdba
输入口令:
已连接。
SQL> select * from employee; DNO ENO ENAME EWORK
---------- ---------- ---------- ----------
1 201401 林蔚然 0 SQL> edit
已写入 file afiedt.buf 1 create view ed_view
2 as
3 select employee.dno,dname,eno,ename,ework,dplace
4 from employee,dept
5* where employee.dno=dept.dno
SQL> / 视图已创建。 SQL> select * from ed_view
2 / DNO DNAME ENO ENAME EWORK DPLACE
---------- ---------- ---------- ---------- ---------- ----------
1 人事部 201401 林蔚然 0 武汉大学 SQL> create table(
2
SQL> edit
已写入 file afiedt.buf 1 create table t_student(
2 sno number(2),
3* ssex number(1)); SQL> edit
已写入 file afiedt.buf 1 create table t_student(
2 sno Varchar2(10) NOT NULL,
3* ssex Number(1)); SQL> select * from t_student
2 / SNO SNAME SSEX SBIRTHDAY
---------- ---------- ---------- --------------
20110002 马力 21-2月 -91
20100002 张杰 1 03-1月 -92
20100003 李娟 0 14-6月 -92
20110001 王强 1
20100001 刘浩 1 12-10月-91
20140001 林蔚然 1 15-2月 -96 已选择6行。 SQL> update t_student set ssex=1 where sno=20110002
2 / 已更新 1 行。 SQL> select * from t_student; SNO SNAME SSEX SBIRTHDAY
---------- ---------- ---------- --------------
20110002 马力 1 21-2月 -91
20100002 张杰 1 03-1月 -92
20100003 李娟 0 14-6月 -92
20110001 王强 1
20100001 刘浩 1 12-10月-91
20140001 林蔚然 1 15-2月 -96 已选择6行。 SQL> edit
已写入 file afiedt.buf 1 create view sex(ssex)
2 as
3 select count(*)
4 from t_student
5* group by ssex
SQL> / 视图已创建。 SQL> select * from sex
2 / SSEX
----------
5
1 SQL> edit
已写入 file afiedt.buf 1 create or replace view sex(ssex)
2 as
3 select count(*) "number"
4 from t_student
5* group by ssex
SQL> / 视图已创建。 SQL> select * from sex; SSEX
----------
5
1 SQL> conn sys / as sysdba
输入口令:
已连接。 SQL> conn scott/passwd
已连接。
SQL> show user;
USER 为 "SCOTT"
SQL> create table staff(
2 id number(6) primary key,
3 name varchar2(10) not null); 表已创建。 SQL> create sequence stud_sequence
2 increment by 1 start with 1
3 maxvalue 49; 序列已创建。 SQL> insert into staff values(stud_sequence.nextval,'Joan'); 已创建 1 行。 SQL> insert into staff values(stud_sequence.nextval,'Wayne'); 已创建 1 行。 SQL> insert into staff values(stud_sequence.nextval,'Rashford'); 已创建 1 行。 SQL> select stud_sequence.currval from dual; CURRVAL
----------
4 SQL> select * from staff; ID NAME
---------- ----------
2 Joan
3 Wayne
4 Rashford SQL> conn sys / as sysdba
输入口令:
已连接。
SQL> select * from t_student; SNO SNAME SSEX SBIRTHDAY
---------- ---------- ---------- --------------
20110002 马力 1 21-2月 -91
20100002 张杰 1 03-1月 -92
20100003 李娟 0 14-6月 -92
20110001 王强 1
20100001 刘浩 1 12-10月-91
20140001 林蔚然 1 15-2月 -96 已选择6行。 SQL> set autotrace trace explain;
SQL> create index student_sno on t_student(sno); 索引已创建。 SQL> select * from t_student where sno=20110002; 执行计划
----------------------------------------------------------
Plan hash value: 3237932320 -------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 24 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_STUDENT | 1 | 24 | 2 (0)| 00:00:01 |
------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter(TO_NUMBER("SNO")=20110002) SQL> create bitmap index student_sex on t_student(ssex); 索引已创建。 SQL> select * from t_student where ssex=1
2 / 执行计划
----------------------------------------------------------
Plan hash value: 3237932320 -------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 72 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_STUDENT | 3 | 72 | 2 (0)| 00:00:01 |
------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("SSEX"=1) SQL> create bitmap index student_no on t_student(sno);

实验六

SQL> declare
2 cursor sno_asc is select sno,sname,ssex from t_student order by sno asc;
3 begin
4 for v_stu in sno_asc loop
5 dbms_output.put_line(v_stu.sno||' '||v_stu.sname||' '||v_stu.ssex);
6 end loop;
7 end;
8 /
20100001 刘浩 1
20100002 张杰 1
20100003 李娟 0
20110001 王强 1
20110002 马力 1
20140001 林蔚然 1 PL/SQL 过程已成功完成。

实验6

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 14:45:05 2016

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

请输入用户名:  system
输入口令: 连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn sys / as sysdba
输入口令:
已连接。 SQL> insert into t_subject values(001,'数据库原理'); 已创建 1 行。 SQL> insert into t_subject values(002,'Oracle数据库应用'); 已创建 1 行。 SQL> insert into t_subject values(003,'数据库系统实现'); 已创建 1 行。 SQL> select * from t_subject; SUB_NO SUB_NAME
---------- --------------------
1 数据库原理
2 Oracle数据库应用
3 数据库系统实现 SQL> select * from t_score; SNO SUB_NO SCORE
---------- ---------- ----------
20100001 1 90
20100002 1 92
20100003 1 88
20100001 2 95
20100003 2 85
20110001 2
20110002 2 已选择7行。 SQL> set serveroutput on SQL> edit
已写入 file afiedt.buf 1 declare
2 cursor score_stat is select Sub_no,sno,score from t_score group by Sub_no,sno,score;
3 v_score score_stat%rowtype;
4 begin
5 open score_stat;
6 fetch score_stat into v_score;
7 while score_stat%found loop
8 dbms_output.put_line(v_score.Sub_no||' '||v_score.sno||' '||v_score.score);
9 fetch score_stat into v_score;
10 end loop;
11 close score_stat;
12* end;
SQL> /
1 20100001 90
2 20100001 95
1 20100002 92
1 20100003 88
2 20100003 85
2 20110002
2 20110001 PL/SQL 过程已成功完成。 SQL> edit
已写入 file afiedt.buf 1 declare
2 cursor score_stat is select Sub_no,avg(score) as avg_score from t_score group by Sub_no;
3 v_score score_stat%rowtype;
4 begin
5 open score_stat;
6 fetch score_stat into v_score;
7 while score_stat%found loop
8 dbms_output.put_line(v_score.Sub_no||' '||v_score.avg_score);
9 fetch score_stat into v_score;
10 end loop;
11 close score_stat;
12* end;
SQL> /
1 90
2 90 PL/SQL 过程已成功完成。 SQL> edit
已写入 file afiedt.buf 1 declare
2 cursor s_stat(p_subno t_score.Sub_no%type) is
3 select t_score.Sub_no,sno,score
4 from t_score,t_subject
5 where t_score.Sub_no=t_subject.Sub_no and t_score.Sub_no=p_subno;
6 v_subno t_score.Sub_no%type;
7 v_stat s_stat%rowtype;
8 begin
9 v_subno := &sno;
10 open s_stat(v_subno);
11 fetch s_stat into v_stat;
12 while s_stat%found loop
13 dbms_output.put_line(v_stat.Sub_no||' '||v_stat.sno||' '||v_stat.score);
14 fetch s_stat into v_stat;
15 end loop;
16 close s_stat;
17* end;
SQL> /
输入 sno 的值: 001
原值 9: v_subno := &sno;
新值 9: v_subno := 001;
1 20100001 90
1 20100002 92
1 20100003 88 PL/SQL 过程已成功完成。 SQL> /
输入 sno 的值: 002
原值 9: v_subno := &sno;
新值 9: v_subno := 002;
2 20100001 95
2 20100003 85
2 20110001
2 20110002 PL/SQL 过程已成功完成。 SQL> /
输入 sno 的值: 003
原值 9: v_subno := &sno;
新值 9: v_subno := 003; PL/SQL 过程已成功完成。 SQL> update t_score set score = 90 where sno = 20100001
2 / 已更新2行。 SQL> update t_score set score = 85 where sno = 20100002
2 / 已更新 1 行。 SQL> update t_score set score = 83 where sno = 20100003
2 / 已更新2行。 SQL> update t_score set score = 86 where sno = 20110001
2 / 已更新 1 行。 SQL> update t_score set score = 81 where sno = 20110002
2 / 已更新 1 行。 SQL> select * from t_score order by score; SNO SUB_NO SCORE
---------- ---------- ----------
20110002 2 81
20100003 1 83
20100003 2 83
20100002 1 85
20110001 2 86
20100001 1 90
20100001 2 90 已选择7行。 SQL> update t_score set score = 84 where sno=20100003 and sub_no=2; 已更新 1 行。 SQL> update t_score set score = 94 where sno=20100001 and sub_no=2; 已更新 1 行。 SQL> select * from t_score order by score; SNO SUB_NO SCORE
---------- ---------- ----------
20110002 2 81
20100003 1 83
20100003 2 84
20100002 1 85
20110001 2 86
20100001 1 90
20100001 2 94 已选择7行。 SQL> declare
2 cursor c_score is select * from t_score order by score desc for update;
3 v_increment number:=10;
4 begin
5 for v_score in c_score loop
6 update t_score set score=score+v_increment where current of c_score;
7 v_increment := v_increment - 1;
8 end loop;
9 end;
10 / PL/SQL 过程已成功完成。 SQL> select * from t_score order by score; SNO SUB_NO SCORE
---------- ---------- ----------
20110002 2 85
20100003 1 88
20100003 2 90
20100002 1 92
20110001 2 94
20100001 1 99
20100001 2 104 已选择7行。 SQL>

实验七

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 11月 21 18:47:00 2016

Copyright (c) 1982, 2010, Oracle. All rights reserved.

请输入用户名: system
输入口令:
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0

请输入用户名: system
输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> connect sys / as sysdba
输入口令:
已连接。
SQL> select * from t_score
2 /

SNO SUB_NO SCORE
---------- ---------- ----------
20100001 1 99
20100002 1 92
20100003 1 88
20100001 2 104
20100003 2 90
20110001 2 94
20110002 2 85

已选择7行。

SQL> create or replace trigger trg_score
2 before update on t_score
3 for each row
4 when(new.score<old.score)
5 begin
6 raise_application_error(-20001,'The score is lower!');
7 end trg_score;
8 /
create or replace trigger trg_score
*
第 1 行出现错误:
ORA-04089: 无法对 SYS 拥有的对象创建触发器

SQL> create user wayne identified by wayne
2 /

用户已创建。

SQL> connect wayne/wayne
ERROR:
ORA-01045: user WAYNE lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到 ORACLE。

SQL> conn
请输入用户名: wayne
输入口令:
ERROR:
ORA-01045: user WAYNE lacks CREATE SESSION privilege; logon denied

SQL> conn
请输入用户名: system
输入口令:
已连接。
SQL> grant connect, resource to wayne;

授权成功。

SQL> grant create session to wayne;

授权成功。

SQL> connect wayne/wayne
已连接。

SQL> edit

已写入 file afiedt.buf

1 create table t_score(
2 Sno Varchar2(10) not null,
3 Sub_no Varchar2(10) not null,
4* score number)
SQL> /

表已创建。

SQL> insert into t_score values(20100001,001,90);

已创建 1 行。

SQL> insert into t_score values(20100002,001,87);

已创建 1 行。

SQL> insert into t_score values(20100003,001,88);

已创建 1 行。

SQL> insert into t_score values(20100001,002,84);

已创建 1 行。

SQL> insert into t_score values(20100003,002,85);

已创建 1 行。

SQL> insert into t_score values(20110001,002,90);

已创建 1 行。

SQL> insert into t_score values(20110002,002,96);

已创建 1 行。

SQL> select * from t_score;

SNO SUB_NO SCORE
---------- ---------- ----------
20100001 1 90
20100002 1 87
20100003 1 88
20100001 2 84
20100003 2 85
20110001 2 90
20110002 2 96

已选择7行。

SQL> create or replace trigger trg_score
2 before update on t_score
3 for each row
4 when(new.score<old.score)
5 begin
6 raise_application_error(-20001,'The score is lower!');
7 end trg_score;
8 /

触发器已创建

SQL> update t_score set score=score-5;
update t_score set score=score-5
*
第 1 行出现错误:
ORA-20001: The score is lower!
ORA-06512: 在 "WAYNE.TRG_SCORE", line 2
ORA-04088: 触发器 'WAYNE.TRG_SCORE' 执行过程中出错

SQL> update t_score set score=score+1;

已更新7行。

SQL> create table t_emp_sco_change(
2 time Date,
3 sno varchar2(10),
4 Sub_no varchar2(10),
5 old_score number,
6 new_score number
7 );

表已创建。

SQL> edit

已写入 file afiedt.buf

1 create or replace trigger trg_score_aft_row
2 after update of score on t_score
3 for each row
4 begin
5 insert into t_emp_sco_change values(sysdate,:old.sno,:old.Sub_no,:old.score,:new.score);
6* end trg_score_aft_row;
SQL> /

触发器已创建

SQL> update t_score set score = 60 where sno=20100001 and Sub_no=001;
update t_score set score = 60 where sno=20100001 and Sub_no=001
*
第 1 行出现错误:
ORA-20001: The score is lower!
ORA-06512: 在 "WAYNE.TRG_SCORE", line 2
ORA-04088: 触发器 'WAYNE.TRG_SCORE' 执行过程中出错

SQL> drop trigger trg_score;

触发器已删除。

SQL> update t_score set score = 60 where sno=20100001 and Sub_no=001;

已更新 1 行。

SQL> update t_score set score = score + 3 where sno=20100003 and sub_no=002;

已更新 1 行。

SQL> select * from t_emp_sco_change;

TIME SNO SUB_NO OLD_SCORE NEW_SCORE
-------------- ---------- ---------- ---------- ----------
21-11月-16 20100001 1 91 60
21-11月-16 20100003 2 86 89

SQL> create or replace trigger trg_scott_only
2 before insert or update or delete
3 on t_score
4 begin
5 if user<>'scott' then
6 raise_application_error(-20001,'不是scott用户,无权修改t_score表');
7 end if;
8 end trg_scott_only;
9 /

触发器已创建

SQL> update t_score set score=score+1;
update t_score set score=score+1
*
第 1 行出现错误:
ORA-20001: 不是scott用户,无权修改t_score表
ORA-06512: 在 "WAYNE.TRG_SCOTT_ONLY", line 3
ORA-04088: 触发器 'WAYNE.TRG_SCOTT_ONLY' 执行过程中出错

SQL> connect scott/kevinGay0441;
已连接。

SQL> conn wayne/wayne;
已连接。
SQL> select * from t_score;

SNO SUB_NO SCORE
---------- ---------- ----------
20100001 1 60
20100002 1 88
20100003 1 89
20100001 2 85
20100003 2 89
20110001 2 91
20110002 2 97

已选择7行。

SQL> create table t_score_dml(

2 who varchar2(10),
3 when date,
4 operater varchar2(10)
5 );

表已创建。

SQL> edit
已写入 file afiedt.buf

1 create or replace trigger trg_sco_aft
2 after insert or update or delete on t_score
3 begin
4 case
5 when inserting then
6 insert into t_score_dml values(user,sysdate,'Insert');
7 when updating then
8 insert into t_score_dml values(user,sysdate,'Update');
9 when deleting then
10 insert into t_score_dml values(user,sysdate,'Delete');
11 end case;
12* end trg_sco_aft;
SQL> /

触发器已创建

SQL> update t_score set score = score-1;
update t_score set score = score-1
*
第 1 行出现错误:
ORA-20001: 不是scott用户,无权修改t_score表
ORA-06512: 在 "WAYNE.TRG_SCOTT_ONLY", line 3
ORA-04088: 触发器 'WAYNE.TRG_SCOTT_ONLY' 执行过程中出错

SQL> drop trigger trg_scott_only;

触发器已删除。

SQL> update t_score set score = score-1;

已更新7行。

SQL> insert into t_score values(20140001,001,99);

已创建 1 行。

SQL> select * from t_score_dml;

WHO WHEN OPERATER
---------- -------------- ----------
WAYNE 21-11月-16 Update
WAYNE 21-11月-16 Insert

SQL> create table t_student(
2 sno varchar2(10) not null,
3 sname varchar2(10) not null);

表已创建。

SQL> insert into t_student values(20100001,'刘浩');

已创建 1 行。

SQL> insert into t_student values(20100002,'张杰');

已创建 1 行。

SQL> insert into t_student values(20100003,'李娟');

已创建 1 行。

SQL> insert into t_student values(20110001,'王强');

已创建 1 行。

SQL> insert into t_student values(20110002,'马力');

已创建 1 行。

SQL> create table t_subject(
2 sub_no varchar2(10),
3 sub_name varchar2(10));

表已创建。

SQL> insert into t_subject values(001,'数据库原理');

已创建 1 行。

SQL> insert into t_subject values(002,'数据库实现');

已创建 1 行。

SQL> select * from t_student;

SNO SNAME
---------- ----------
20100001 刘浩
20100002 张杰
20100003 李娟
20110001 王强
20110002 马力

SQL> connect sys / as sysdba;
输入口令:
已连接。
SQL> grant create any view to wayne;

授权成功。

SQL> connect wayne/wayne;
已连接。
SQL> create or replace view student_score
2 as
3 select t_score.sub_no,sub_name,t_score.sno,sname,score
4 from t_student,t_score,t_subject
5 where t_student.sno=t_score.sno and t_score.sub_no=t_subject.sub_no
6 with check option;

视图已创建。

SQL> insert into student_score values(003,'体育',20100001,'张天',100);
insert into student_score values(003,'体育',20100001,'张天',100)
*
第 1 行出现错误:
ORA-01779: 无法修改与非键值保存表对应的列

SQL> update student_score set score = score+1;
update student_score set score = score+1
*
第 1 行出现错误:
ORA-01779: 无法修改与非键值保存表对应的列

SQL> create or replace trigger trig_view
2 instead of update on student_score
3 for each row
4 declare
5 v_score t_score.score%type;
6 begin
7 select score into v_score
8 from t_score where score=:new.score;
9 update t_score set score = v_score;
10 end trig_view;
11 /

触发器已创建

SQL> create or replace trigger trig_view
2 instead of update on student_score
3 for each row
4 declare
5 v_score t_score.score%type;
6 begin
7 select score into v_score
8 from t_score where score=:old.score;
9 update t_score set score = v_score;
10 end trig_view;
11 /

触发器已创建

SQL> select * from student_score;

SUB_NO SUB_NAME SNO SNAME SCORE
---------- ---------- ---------- ---------- ----------
2 数据库实现 20100001 刘浩 84
1 数据库原理 20100001 刘浩 59
1 数据库原理 20100002 张杰 87
2 数据库实现 20100003 李娟 88
1 数据库原理 20100003 李娟 88
2 数据库实现 20110001 王强 90
2 数据库实现 20110002 马力 96

已选择7行。

SQL> update student_score set score=score+1 where score=84;

已更新 1 行。

SQL> select * from student_score;

SUB_NO SUB_NAME SNO SNAME SCORE
---------- ---------- ---------- ---------- ----------
2 数据库实现 20100001 刘浩 84
1 数据库原理 20100001 刘浩 84
1 数据库原理 20100002 张杰 84
2 数据库实现 20100003 李娟 84
1 数据库原理 20100003 李娟 84
2 数据库实现 20110001 王强 84
2 数据库实现 20110002 马力 84

已选择7行。

SQL> drop trigger trig_view;

触发器已删除。

SQL> update student_score set score=score+1 where score=84;
update student_score set score=score+1 where score=84
*
第 1 行出现错误:
ORA-01779: 无法修改与非键值保存表对应的列

SQL> create or replace trigger tr_t_student_ddl
2 before drop on schema
3 begin
4 if ora_dict_obj_name='t_student' then
5 raise_application_error(-20001,'表t_student不允许被删除');
6 end if;
7 end;
8 /

触发器已创建

SQL> edit

已写入 file afiedt.buf

1 create or replace trigger tr_t_student_ddl
2 before drop on schema
3 begin
4 raise_application_error(-20003,'表t_student不允许被删除');
5* end;
SQL> /

触发器已创建

SQL> create table t_student(
2 sno varchar2(10),
3 sname varchar2(10));

表已创建。

SQL> drop table t_student;
drop table t_student
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-20003: 表t_student不允许被删除
ORA-06512: 在 line 2

SQL> drop trigger tr_t_student_ddl;

触发器已删除。

SQL> drop table t_student;

表已删除。

SQL> create table sta_shu(
2 who varchar2(20),
3 when Date,
4 manner varchar2(20)
5 );

表已创建。

SQL> connect
请输入用户名: sys
输入口令:
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

警告: 您不再连接到 ORACLE。

SQL> connect sys / as sysdba
输入口令:
已连接。

SQL> create table sta_shu(
2 who varchar2(20),
3 when Date,
4 manner varchar2(20)
5 );

表已创建。

SQL> create or replace trigger shut_database
2 before shutdown on database
3 begin
4 insert into sta_shu values(user,sysdate,'shutdown database!');
5 end;
6 /

触发器已创建

SQL> create or replace trigger start_database
2 after startup on database
3 begin
4 insert into sta_shu values(user,sysdate,'startup database!');
5 end;
6 /

触发器已创建

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 1862273720 bytes
Database Buffers 1493172224 bytes
Redo Buffers 16232448 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from sta_shu;

WHO WHEN MANNER
-------------------- -------------- --------------------
SYS 21-11月-16 shutdown database!
SYS 21-11月-16 startup database!

SQL>

Oracle 实验四-七的更多相关文章

  1. ORACLE 实验一

    实验一:数据定义 实验学时:4学时 实验类型:综合型 实验要求:必修 一.实验目的 1.熟悉Oracle的client配置: 2.掌握SQL Plus的使用: 3.掌握SQL模式定义语句,定义相关的表 ...

  2. 20155212 实验四 《Android程序设计》 实验报告

    20155212 实验四 <Android程序设计> 实验报告 (一)Android Stuidio的安装测试 参考<Java和Android开发学习指南(第二版)(EPUBIT,J ...

  3. 20165230 《Java程序设计》实验四 Android程序设计实验报告

    20165230 <Java程序设计>实验四 Android程序设计实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导 ...

  4. 实验四 Android程序设计 实验报告 20162305李昱兴

    实验四 Android程序设计 实验报告 20162305李昱兴 一.Android Studio的安装测试 1.有关该软件 Android Studio,是基于Itellij IDEA的一款流行的I ...

  5. 2018-2019-2 20175307 实验四《Android程序设计》实验报告

    任务一 实验要求和内容: Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十 ...

  6. 2018-2019-2 20175213实验四 《Android开发基础》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1752班 姓名:吕正宏 学号:20175213 指导教师:娄嘉鹏 实验日期:2019年5月14日 实验时间:13:45 - 21:00 实验序号:实验 ...

  7. 2018-2019-2 20175223 实验四 《Android开发基础》实验报告

    目录 北京电子科技学院(BESTI)实验报告 实验名称:实验四 Android程序设计 实验内容.步骤与体会: 一.实验四 Android程序设计-1 二.实验四 Android程序设计-2 三.实验 ...

  8. 20175314 实验四 Android开发基础

    20175314 实验四 Android开发基础 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:薛勐 学号:20175314 指导教师:娄嘉鹏 实验日期:2019年5月17日 实验 ...

  9. 20184302 2019-2020-2 《Python程序设计》实验四报告

    20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...

随机推荐

  1. jQuery Validation Engine 表单验证

    功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则. 兼容 IE 6+, Chrome, ...

  2. jquery模拟LCD 时钟

    查看效果网址:http://keleyi.com/keleyi/phtml/jqtexiao/24.htm 以下是HTML文件源代码: <!DOCTYPE html PUBLIC "- ...

  3. 【UI插件】开发一个简单日历插件(上)

    前言 最近开始整理我们的单页应用框架了,虽然可能比不上MVVM模式的开发效率,也可能没有Backbone框架模块清晰,但是好歹也是自己开发出来 而且也用于了这么多频道的东西,如果没有总结,没有整理,没 ...

  4. 网站 robots.txt 文件编写

    网站 robots.txt 文件编写 Intro robots.txt 是网站根目录下的一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被robots访问的部分,或者指定搜索引擎只收录指定的 ...

  5. 修改ArcSDE的最大连接数

    我们大体都知道ArcSDE的连接数有 48 的限制,很多人也知道这个参数可以修改,并且每种操作系统能支持的最大连接数是不同的. 如果应用报错:超出系统最大连接数该如何处理? 两种解决办法: 第一,首先 ...

  6. 用UILocalNotification实现一个闹钟(Swift)

    之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...

  7. iOS 杂笔-25(不要用copy修饰NSMutableString)

    iOS 杂笔-25(不要用copy修饰NSMutableString) 首先对题目进行简单的解释,我所说的不要用copy修饰NSMutableString不是说完全不可以用.但是要清楚一点,既然使用N ...

  8. PHP设计模式 迭代器模式

    迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素.相比于传统的编程模式,迭代器模式可以隐藏遍历元素所需要的操作. AllHacl.php <?php namespace Ba ...

  9. winform窗体(一)——基本属性

    一.窗体设计界面 二.部分属性 1.基本 设计中的Name:窗体类的类名 AcceptButton:窗口的确定按钮Enter CancelButton:窗口按ESC的取消按钮 2.外观 Backcol ...

  10. DB2 JDBC

    官方文档: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.apdv.java.doc/src/ ...