Oracle一些常见的实验命令

2021-03-25

1. 创建存储过程:可查询任一员工的基本信息,写出执行过程
代码:

create or replace procedure pro_selectEmp( 
    V_num in scott.emp.empno%type,    //定义数据类型 in代表传入变量
    V_ans out scott.emp%rowtype)  //定义数据类型 out 代表本存储过程传出变量
is
begin
    select * into V_ans  //将查询所得内容 放入V_ans中
    from emp where empno=V_num; //限定条件
end pro_selectEmp;  //结束此次过程
/

调用查询:

//以下内容为验证过程 
set serverout on; //设置其显示
declare
V_ans emp%rowtype; //定义一个数据类型 接受存储过程传出的变量
begin
    pro_selectEmp(7788,V_ans);//调用存储过程
    dbms_output.put_line(V_ans.ename||'的编号为:'||V_ans.empno||',工作为:'||V_ans.job||',工资为:'||V_ans.sal);
end;
/

2. 创建存储过程:可更新任一员工的基本信息,写出执行过程

create or replace procedure pro_updateEmp(//创建存储过程
    V_num in emp.empno%type,//in变量 传入的员工编号
    V_work in emp.job%type)   //in 变量 传入的要修改的员工职位
is 
begin
    update emp set job=V_work where empno=V_num; //更新语句
    commit;  //提交数据库
    dbms_output.put_line('更新成功');  //打印结果
end;
/

调用查询

set serverout on;
begin
    pro_updateEmp(6666,'ANALYST');
end;
/

3. 创建触发器,完成功能:删除 emp 表中任意数据时,显示删除的具体内容

set serverout on;
create or replace trigger tri_emp //创建触发器
before delete  //在每次删除之前触发
on scott.emp //在scott.emp表单下查询
for each row //循环读取查询到的内容
begin
    dbms_output.put_line('删除员工的编号为:'||:old.empno||'姓名为:'||:old.ename||'工作为:'||:old.job||'工资为:'||:old.sal);
end;
/

执行显示

delete from emp where empno='员工号';

4. 创建触发器,完成功能:删除任意表格时,给出“表格已删除”提示

set serverout on; //设置显示
create or replace trigger tri_ddl_oper //创建触发器
after drop //在删除操作完成之后触发
on schema //在次表中 如果这个报权限错误 可以 改为 scott.schema
begin //开始执行
    if ora_dict_obj_type='TABLE' then  //判断删除的是表单数据时
        dbms_output.put_line('表格已删除');
    end if;
end;
/

执行
可以任意删除一张表进行试验

5. 创建包,包内含至少一个函数、一个存储过程(功能自定义),写出调用过程

注:包定义是只需指明函数和存储过程的名字和参数即可不需要具体执行

创建包 内包含一个函数求员工平均值
一个存储过程 更新工作位 var_job 的工资

create or replace package pack_emp is
function fun_avg_sal(num_deptno number) return number;
procedure pro_regulate_sal(var_job varchar2,num_proportion number);
end;
/

实现

创建包主体 并且实现函数和存储过程

create or replace package body pack_emp is
    function fun_avg_sal(num_deptno number) return number is
    num_avg_sal number;
    begin
        select avg(sal) into num_avg_sal
        from emp
        where deptno=num_deptno;
        return(num_avg_sal);
        exception
        when no_data_found then
        dbms_output.put_line('该部门标号不存在雇员记录');
        return 0;
    end;

    procedure pro_regulate_sal(var_job varchar2,num_proportion number) is
    begin
        update emp
        set sal=sal*(1+num_proportion)
        where job=var_job;
    end;
end pack_emp;
/

执行

set serverout on;
declare
    num_deptno emp.deptno%type;
    var_job emp.job%type;
    num_avg_sal emp.sal%type;
    num_proportion number;
begin
    num_deptno:=10;
    num_avg_sal:=pack_emp.fun_avg_sal(num_deptno);
    dbms_output.put_line(num_deptno||'号部门的平均工资是:'||num_avg_sal);
    var_job:='SALESMAN';
    num_proportion:=0.1;
    pack_emp.pro_regulate_sal(var_job,num_proportion);
end;
/

6.将表空间 USERS 中的数据文件 users03.DBF 更名为 userdata03 .dbf

代码:

alter tablespace users offline;//让其处于离线状态
host copy  E:\USER03.DBF E:\USERDATA03.DBF//复制  相当于创建要命名的数据库文件
alter tablespace users rename datafile 'E:\USER03.DBF'//更换数据库文件
to 'E:\USERDATA03.DBF';
alter tablespace users online;//让表空间在线

标题:Oracle一些常见的实验命令
作者:xiaob0
地址:https://xiaobo.net.cn/articles/2021/03/25/1616654145583.html