考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > Java语言程序设计 > 考试辅导 > 文章内容
  

全国计算机等级考试二级Java重点内容(14)

中华IT学院   【 】  [ 2016年9月19日 ]

DML: insert / update / delete

DDL: create / drop / alter /      truncate

DCL: grant / revoke

 

一 DML

1.insert

insert into dept_ning

values(55, 'market', 'beijing');

 

insert into dept_ning

(deptno,  dname, location)

values(56, 'research', 'beijing');

--数据没有全部提供,必须写列名

insert into emp_ning(empno, ename,

salary, deptno)

values(1234,'rose',5000,10,500);

 

--出错,没有足够的值

insert into emp_ning(empno, ename, salary)

values(1234,'rose');

 

--出错,值太多了

insert into emp_ning(empno, ename, salary)

values(1234,'rose',5000,500);

 

insert into emp_ning(empno, ename,

salary, hiredate)

values(1234, 'rose', 5000,

to_date('2012/01/01','yyyy/mm/dd'));

 

create table emp_bak

as

select * from emp_ning where deptno = 10;

 

delete from emp_bak;

 

insert into emp_bak (select * from emp_ning  where deptno = 20);

 

create table myObjects  as select * from all_objects where rownum < 1000;

 

delete myObjects;

 

insert into myObjects (select * from all_objects where rownum < 10000);

2.update

update 表名

set 列1 = 新值1,列2 = 新值2,...

where 条件;

 

update emp_ning set bonus = 1000, deptno = 20, job = 'Programmer' where empno = 1234;

 

3.delete

delete emp_ning where empno = 1234;

delete emp_ning where deptno = 10;

delete emp_ning;

select count(*) from emp_ning;

rollback;

select count(*) from emp_ning;

 

create table emp_bak1_ning

as

select empno, ename,salary

from emp_ning

where deptno = 30;

--适合bak1中重复记录非常多的场合.

              复制非重复记录

emp_bak1_ning--------------> bak2

删掉表bak1, 把bak2改名为bak1.

--适合bak1中重复记录非常少的场合.

--直接在bak1中删除.

--查询重复记录中地址最大的那条

select empno, ename, salary,

       max(rowid)

from emp_bak1_ning

group by empno, ename, salary;

--删除除了地址最大的重复记录之外所有的记录.

delete emp_bak1_ning

where rowid not in (

select max(rowid)

from emp_bak1_ning

group by empno, ename, salary);

rownum, rowid是Oracle独有的.

事务 Transaction

commit / rollback

-----事务开始--------------

DML:insert / delete / update

commit(提交,确认),

或者 rollback(回滚,撤销)

-----事务终止--------------

A                B

insert : 1234    select (查不到)

commit          

                 可以查到 1234

update          

                 update(挂起)

commit(释放锁)   修改成功

update(挂起)

                 rollback;

修改成功.

---开始事务-----

update account

set money = money - 500

where id = 'A';

update account

set money = money + 500

where id = 'B';

if (都成功)

         commit;

else

             rollback;

-----事务终止-----

正常退出会话: commit

异常退出会话: rollback

DDL操作: commit

create table temp_ning (id number);

insert into temp_ning values(1);

insert into temp_ning values(2);

--设置保存点,名字是a(自定义)

savepoint a;

insert into temp_ning values(3);

insert into temp_ning values(4);

--回滚到指定点

rollback to a;

select * from temp_ning;--2条记录

 

insert into temp_ning values(100);

savepoint b;

insert into temp_ning values(5);

savepoint c;

insert into temp_ning values(6);

--b点之后的保存点被取消

rollback to b;

insert / update / delete

二.DDL操作:

create / drop / alter / truncate

create table 表名(

列1 列1数据类型,

列2 列2数据类型,

....

);

drop table 表名;

create function f_name()....

drop function f_name;

alter: 修改对象结构

create table temp_ning(id number);

 

--增加列,只能加在最后.

alter table temp_ning  add (name char(20));

alter table temp_ning add (age number(3));

--改列名

 alter table temp_ning

 rename column name to stuname;

--改列的类型char(20)->char(10)

--放大可以

--缩小的话, 如果数据有超过10个字符的,不能修改.

id    stuname        age

1     tom             18

2     zhangsan        20

 

--删除列age

alter table temp_ning

drop column age;

alter table 表名

--add (name char(20));

--rename column 旧列名 to 新列名;

--modify (age number(3));

--drop column 列名;

--截取表:把表数据全部删除.

--立即生效,不能rollback

truncate table temp_ning;

delete temp_ning + commit

--三思而后行

drop table ....;

truncate table ...;

三.DCL语言

grant / revoke

--授权

grant select on emp_ning to scott;

--撤销权限

revoke select on emp_ning from scott;

sys/安装时设置

system/安装时设置

scott/tiger(测试用户)

...

openlab/open123

ninglj/*****

四.脚本文件

文档

源代码

数据库脚本文件

1.创建脚本文件script_ning.sql

$vi script_ning.sql

-----------------------

drop table temp_ning;

create table temp_ning(id number);

insert into temp_ning values(1);

commit;

-----------------------

esc键-> :wq

2.sqlplus中批处理执行脚本文件

SQL>@ /user/openlab/script_ning.sql

 

数据库在192.168.0.26

数据库的口令:openlab/open123

Oracle的端口号: 1521

Oracle的名字(sid):tarena

sqlplus安装在本地机器上

 

C:>sqlplus openlab/open123@192.168.0.26:1521/tarena

SQL>

 

连接数据库的工具:

--首选,命令行工具

sqlplus

--图形工具

pl/sql developer(非官方,免费)

toad(非官方,收费)

sql developer(官方,免费,11g以上)

补充练习: procedure 过程

PL/SQL:  Procedure Language / SQL

函数(function)

过程(procedure)

包(package)

触发器(trigger)

--输入班号,输出最高分的学生名字和总成绩

create or replace procedure cal_ning(

 p_class_id in number, p_student_name out char,

 p_total_score out number

)

is

begin

  select student_name, total_score

  into  p_student_name, p_total_score

  from (

    select stu.student_name,

           sum(per.test_score) total_score

    from t_student_ning stu join t_performance_ning per

    on stu.student_id = per.student_id

    where stu.class_id = p_class_id

    group by stu.student_name

    order by total_score desc)

  where rownum < 2;

end;

/

--打开输出,默认值是off

SQL>set serveroutput on

--匿名块,用来测试过程或函数

SQL>declare

  p_student_name char(20);

  p_total_score number;

begin

  cal_ning(&no, p_student_name,       p_total_score);

  --向控制台输出变量值,System.out.print

  dbms_output.put_line(p_student_name);

  dbms_output.put_line(p_total_score);

end;

/

--可以用&abc符号表示在运行时输入变量值

select * from emp_ning

where deptno = &abc;

--改进版,输入共多少个班,输出每个班的最高成绩的学生姓名和总分

--假设是班号是1-p_class_num

create or replace procedure cal_ning1(

   p_class_num in number)

is

  p_student_name char(20);

  p_total_score number;

begin

  for i in 1..p_class_num loop

    select student_name, total_score

    into  p_student_name, p_total_score

    from (

      select stu.student_name,

           sum(per.test_score) total_score

      from t_student_ning stu join t_performance_ning per

      on stu.student_id = per.student_id

      where stu.class_id = i

      group by stu.student_name

      order by total_score desc)

    where rownum < 2;

    dbms_output.put_line

        (p_student_name || ', ' || p_total_score);

  end loop;

end;

/

SQL>exec cal_ning1(2); --2个班

分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved