Oracle:关于分布式数据库(创建数据库链路,创建触发器)
SQL> host cls
SQL> show user
USER 為 "SCOTT"
SQL> conn / as sysdba
已連接。
SQL> grant create database link to scott;
授權成功。
SQL> conn scott/tiger
已連接。
SQL> --創建數據庫鏈路
SQL> create database link mylink connect to scott identified by tiger using 'remoteorcl';
數據庫鏈接已創建。
SQL> --查詢遠端的數據
SQL> --查詢員工的信息,要求顯示員工號,姓名和部門號
SQL> --假設本地只有部門表,員工表在遠端
SQL> select e.empno,e.ename,d.dname
?? from dept d, emp@mylink e
?? where d.dno=e.dno
SQL> desc dept;
?名稱??????????????????????????????????????????????????????????????????????????????? 是否為空? 類型
?----------------------------------------------------------------------------------- -------- --------------------------------------------------------
?DEPTNO????????????????????????????????????????????????????????????????????????????? NOT NULL NUMBER(2)
?DNAME??????????????????????????????????????????????????????????????????????????????????????? VARCHAR2(14)
?LOC????????????????????????????????????????????????????????????????????????????????????????? VARCHAR2(13)
SQL> ed
已寫入 file afiedt.buf
? 1? select e.empno,e.ename,d.dname
? 2? from dept d, emp@mylink e
? 3* where d.deptno=e.deptno
SQL> /
???? EMPNO ENAME??????????????????????????????????? DNAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------------------------------------- --------------???????????????????????????????????????????????????????????????????????????????????
????? 7369 SMITH??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7499 ALLEN??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7521 WARD???????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7566 JONES??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7654 MARTIN?????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7698 BLAKE??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7782 CLARK??????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
????? 7788 SCOTT??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7839 KING???????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
????? 7844 TURNER?????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7876 ADAMS??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
???? EMPNO ENAME??????????????????????????????????? DNAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------------------------------------- --------------???????????????????????????????????????????????????????????????????????????????????
????? 7900 JAMES??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7902 FORD???????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7934 MILLER?????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
已選擇14行。
SQL> create synonym remoteemp for emp@mylink;
同義詞已創建。
SQL> ed
已寫入 file afiedt.buf
? 1* create synonym remoteemp for emp@mylink
SQL>? select e.empno,e.ename,d.dname
? 2?? from dept d, remoteemp e
? 3?? where d.deptno=e.deptno;
???? EMPNO ENAME??????????????????????????????????? DNAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------------------------------------- --------------???????????????????????????????????????????????????????????????????????????????????
????? 7369 SMITH??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7499 ALLEN??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7521 WARD???????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7566 JONES??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7654 MARTIN?????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7698 BLAKE??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7782 CLARK??????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
????? 7788 SCOTT??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7839 KING???????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
????? 7844 TURNER?????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7876 ADAMS??????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
???? EMPNO ENAME??????????????????????????????????? DNAME????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------------------------------------- --------------???????????????????????????????????????????????????????????????????????????????????
????? 7900 JAMES??????????????????????????????????? SALES????????????????????????????????????????????????????????????????????????????????????????????
????? 7902 FORD???????????????????????????????????? RESEARCH?????????????????????????????????????????????????????????????????????????????????????????
????? 7934 MILLER?????????????????????????????????? ACCOUNTING???????????????????????????????????????????????????????????????????????????????????????
已選擇14行。
SQL> create or replace trigger syncSalary
? 2? after update on emp
? 3? for each row
? 4? begin
? 5? ?update remoteemp set sal = :new.sal where empno=:new.empno;
? 6????????? commit;
? 7? end;
? 8? /
觸發器已創建
SQL> host cls
SQL> select empno,ename,sal from emp where empno=7839;
???? EMPNO ENAME???????????? SAL?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----------?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7839 KING???????????? 5000?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
SQL> update emp set sal=sal+100 where empno=7839;
update emp set sal=sal+100 where empno=7839
?????? *
第 1 行出現錯誤:
ORA-02055: 分布式更新操作失效; 要求回退
ORA-04092: COMMIT 不能在觸發器中
ORA-06512: 在 "SCOTT.SYNCSALARY", line 3
ORA-04088: 觸發器 'SCOTT.SYNCSALARY' 執行過程中出錯
SQL> create or replace trigger syncSalary
? 2? after update on emp
? 3? for each row
? 4? begin
? 5? ?update remoteemp set sal = :new.sal where empno=:new.empno;
? 6? end;
? 7? /
create or replace trigger syncSalary
*
第 1 行出現錯誤:
ORA-02067: 要求事務處理或保存點回退
SQL> rollback;
回退已完成。
SQL> create or replace trigger syncSalary
? 2? after update on emp
? 3? for each row
? 4? begin
? 5? ?update remoteemp set sal = :new.sal where empno=:new.empno;
? 6? end;
? 7? /create or replace trigger syncSalary
? 8? after update on emp
? 9? for each row
?10? begin
?11? ?update remoteemp set sal = :new.sal where empno=:new.empno;
?12? end;
?13? /
警告: 創建的觸發器帶有編譯錯誤。
SQL> create or replace trigger syncSalary
? 2? after update on emp
? 3? for each row
? 4? begin
? 5? ?update remoteemp set sal = :new.sal where empno=:new.empno;
? 6? end;
? 7? /
觸發器已創建
SQL> select empno,ename,sal from emp where empno=7839;
???? EMPNO ENAME???????????? SAL?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----------?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7839 KING???????????? 5000?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
SQL> update emp set sal=sal+100 where empno=7839;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select empno,ename,sal from emp where empno=7839;
???? EMPNO ENAME???????????? SAL?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
---------- ---------- ----------?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????? 7839 KING???????????? 5100?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
SQL> exit
總結
以上是生活随笔為你收集整理的Oracle:关于分布式数据库(创建数据库链路,创建触发器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车辆办理报废了为什么还要去车管所办理开锁
- 下一篇: 国产电梯品牌有哪些?哪个更有实力?