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