您的位置:首页 > 其它

存储过程和视图、函数、同义词、表分区、触发器等

2015-04-06 11:58 357 查看
--存储过程实现根据雇员编号查询雇员姓名和薪水

create or replace procedure find_detail(id in number,

name out varchar2,

sal out varchar2) is

begin

select e.ename, e.sal into name, sal from emp e where e.empno = id;

dbms_output.put_line('雇员编号:' || id || ',雇员姓名:' || name || ',雇员薪水:' || sal);

end;

--执行存储过程find_detail

select * from emp;

Declare

id emp.empno%type;

name emp.ename%type;

sal emp.sal%type;

begin

find_detail(7369, name, sal);

end;

--创建emp所有员工的薪水

create or replace procedure find_all_sal(c_all_sals out sys_refcursor) is

begin

open c_all_sals for select ename, sal from emp;

end;

--执行存储过程c_all_sals

select * from emp;

Declare

c_all_sals sys_refcursor;

sal emp.sal%type;

name emp.ename%type;

begin

find_all_sal(c_all_sals);

loop

fetch c_all_sals into name, sal;

exit when c_all_sals%notfound;

dbms_output.put_line('员工姓名:' || name || ',员工薪水:' || sal);

end loop;

end;

--查询存储过程视图

select * from all_procedures; select * from user_procedures; select * from dba_procedures;

--通过函数来查询指定雇员编号的姓名、工资

create or replace function f_query_emp(id emp.empno%type, name out emp.ename%type) return emp.sal%type is

sal emp.sal%type;

begin

select e.ename, e.sal into name, sal from emp e where e.empno = id;

return sal;

exception

when others then dbms_output.put_line('出现异常');

end;

--调用函数

select * from emp;

DECLARE

name emp.ename%type;

sal emp.sal%type;

id emp.empno%type;

BEGIN

id := &id;

sal := f_query_emp(id, name);

dbms_output.put_line('雇员编号:' || id || ',姓名:' || name || ',薪水' || sal);

END;

--创建触发器

select * from emp;

create table tb as select * from emp;

select * from tb;

delete from tb ;

create trigger tri_tb after delete on emp for each row

begin

insert into tb values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno);

end;

delete from emp where emp.empno=7369;

insert into emp select * from tb;

--模式触发器

--创建表

create table event_ddl(

event varchar2(20),

username varchar2(10),

owner varchar2(10),

objname varchar2(20),

objtype varchar2(10),

time DATE

)

--创建触发器

create or replace trigger tr_ddl

after ddl on scott.schema

begin

insert into event_ddl

values(ora_sysevent,ora_login_user,ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,sysdate);

end;

--ddl操作

create table temp(a int);

--删除表操作

drop table temp;

--查看结果

select * from event_ddl;

--删除触发器

drop trigger tr_ddl;

drop trigger tri_tb;

--以上是模式触发器

/***************************************************************************************************

20140813

数据库设计

****************************************************************************************************/

create sequence seq start with 1 increment by 1

order nocycle nocache;

select seq.nextval from dual;

select seq.currval from dual;

drop sequence seq;

--区间分区

create table tb_season (

id number(10),

type varchar2(20),

sale number(10,3),

time date

)

partition by range(time)(

partition p1 values less than (to_date('2013-04-01','yyyy-mm-dd')),

partition p2 values less than (to_date('2013-07-01','yyyy-mm-dd')),

partition p3 values less than (to_date('2013-10-01','yyyy-mm-dd')),

partition p4 values less than (maxvalue)

);

select * from tb_season partition (p1);

select * from tb_season partition (p2);

select * from tb_season partition (p3);

select * from tb_season partition (p4);

--同义词

create public synonym ty for scott.emp;

select * from ty;

drop public synonym ty;

select * from all_synonyms;

--登录scott账户,在命令窗口执行

conn scott/tiger@orcl;

/**********

创建序列,未指定精度

***********/

create table yaoshan (

id number(20),

name varchar2(20)

);

create sequence seq_biaomi start with 1 increment by 1

minvalue 1 maxvalue 9999999 nocycle cache 10;

--插入数据

insert into yaoshan values(seq_biaomi.nextval,'qn'||seq_biaomi.currval);

select * from yaoshan;

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

create sequence seq_biaoming start with 1 increment by 1

minvalue 1 maxvalue 9999999 nocycle cache 10;

/***************************************************************************************************/

/* 创建视图 */

/***************************************************************************************************/

create or replace force view v_table as select * from emp where deptno = 30 order by sal asc;

select * from v_table;

--练习题

select * from dept;

create or replace view v_dept as select deptno 部门编号,dname 部门名称,loc 部门地址 from dept;

select * from v_dept;

insert into v_dept values(50,'ll','v');

delete from v_dept where 部门编号=50;

--查看用户下面的哪些表的字段可以修改,表名要大写

select * from user_updatable_columns where table_name='EMP';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐