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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章