Oracle的对象

Synonym同义词

--先授权
grant create synonym to scott; 
--创建  synonym 同义词名  for 表名;
create synonym syn_emp for emp;
--查询
select * from syn_emp;

View同义词

--授权
grant create view to scott;
--创建
create or replace view vi_emp
as
select * from emp;
--查询
select * from vi_emp;


----查询员工信息表和部门表 连表查询 两张表的数据  创建视图
create or replace  view vi_emp_dept
as
select e.ename,e.job,e.sal,e.hiredate,d.dname from emp e inner join dept d on e.deptno=d.deptno;
--查询
select * from vi_emp_dept;


--授予某个用户查询某个视图的权限
grant select on vi_emp_dept to yuanwenyi;
select * from scott.vi_emp_dept;

--视图中的数据是可以修改 会影响原表的数据 
select * from vi_emp_dept;
update vi_emp_dept set ename='xxxxxx' where ename='SCOTT'
select * from emp;

--视图中的数据是可以删除,删除之后也会影响原表的数据
delete vi_emp_dept where ename='SCOTT';
select * from emp;

--视图是否可以嵌套创建 是否可以无限嵌套 (不建议视图反复嵌套)
select * from vi_emp_dept;
create or replace view vvi_emp_dept
as
select * from vi_emp_dept;
select * from vvi_emp_dept;

存储过程(简称过程)

--存储过程(过程)
create or replace procedure pro_emp_test(eno number)
is--代表过程的开始
sname varchar2(20);
begin
      select ename into sname from emp where empno=eno;
      dbms_output.put_line('姓名是'||sname);
      
      --异常处理
      exception when no_data_found then
                dbms_output.put_line('没有数据');
                when too_many_rows then
                dbms_output.put_line('数据太多');
end;

--调用过程
call pro_emp_test(7788)
--调用过程2
declare
eno number(20);
sname varchar2(20);
begin	
	eno:=7788;
	pro_emp_test(eno,sname);
	dbms_output.put_line('姓名是:'||sname);
end;


--存储过程的参数和返回值 通过传入的参数编号查询员工姓名返回
create or replace procedure pro_empno(eno in number,sname out varchar2)
is
begin
    select ename into sname from emp where  empno=eno;
end;

--调用
declare 
eno number(20);
sname  varchar2(20);
begin
    eno:=7788;
    pro_empno(eno,sname);
    dbms_output.put_line(sname);
end;

使用存储过程增删改

--编写emp表增删改的过程
--增
create or replace procedure pro_emp_add(empno number,ename varchar2,job varchar2,mgr number,hiredate date,sal number,comm number,deptno number)
is
begin
       insert into emp values(empno,ename,job,mgr,hiredate,sal,comm,deptno);
end;
--调用
begin
       pro_emp_add(2,'admin','xx',23,sysdate,2,3,20);
end;
select * from emp;



--删
create or replace procedure pro_emp_delete(eno number)
is
begin
     delete from emp where empno=eno;
end;
--调用
begin
     pro_emp_delete(2);
end;
select * from emp;


--修改
create or replace procedure pro_emp_update(eno number,en varchar2,jb varchar2,mr number,he date,sl number,com number,dno number)
is
begin
     update emp set ename=en,job=jb,mgr=mr,hiredate=he,sal=sl,comm=com,deptno=dno where empno=eno;
end;
--调用
begin
    pro_emp_update(7369,'admin2','xx2',232,sysdate,2,3,10);
end;
发布了62 篇原创文章 · 获赞 6 · 访问量 2593

猜你喜欢

转载自blog.csdn.net/qq_44424498/article/details/100540373