--先授权
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;