遠端呼叫procedure可能會有一些缺陷!

warehouse發表於2008-04-02
看到pub上有人問如何遠端呼叫過程,其實大部分人都會想到透過db link事實上也確實如此,不過我相信實際在使用的時候可能沒有多少人這樣用而是通常會使用另外的辦法[@more@]

測試過程:

1.首先連上庫db11檢視並測試了事先建立好的proc_test

C:>sqlplus xys/manager

SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 4月 2 14:06:59 2008

Copyright (c) 1982, 2007, Oracle. All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select text from user_source WHERE name='PROC_TEST';

TEXT
--------------------------------------------------------------------------------

procedure proc_test
is
v_count int ;
begin
select count(*) into v_count from tt;
dbms_output.put_line(v_count);
end;

已選擇7行。

SQL> set serveroutput on
SQL> exec proc_test;
4

PL/SQL 過程已成功完成。

SQL>

2.開另外一個session連上另外一個庫

E:oracleproduct10.2.0db_1BIN>sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4月 2 14:25:47 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.


連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> set serveroutput on

--db link是事先建立好的
SQL> select * from user_db_links;

DB_LINK USERNAME PASSWORD HOST CREATED
---------- ---------- ------------------------------ ---------- --------------
DBL XYS db11 01-4月 -08

--呼叫遠端過程發現並不能輸出資料,原因是遠端過程是要在遠端伺服器上執行的;因此透過呼叫遠端過程在某種情況下可能會存在一些缺陷。

SQL> exec ;

PL/SQL 過程已成功完成。

3. 那麼通常的做法是在本地建立過程來訪問遠端的物件(通常都是指表吧):

本地建立過程訪問遠端物件大致測試如下:

SQL> create or replace procedure proc_test
2 is
3 v_count int;
4 begin
5 select count(*) into v_count from ;
6 dbms_output.put_line(v_count);
7 end;
8 /

過程已建立。

SQL> exec proc_test;
4

PL/SQL 過程已成功完成。

SQL>

4. 既然遠端存在過程,而且過程最終肯定是在其所在的伺服器上執行,那麼我們可以直接連上遠端資料庫而執行過程,因此遠端呼叫過程的意義實在不是很大。

SQL> connect
已連線。
SQL> set serveroutput on
SQL> exec proc_test;
4

PL/SQL 過程已成功完成。

SQL>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1001798/,如需轉載,請註明出處,否則將追究法律責任。

相關文章