線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4001
推到 Plurk!
推到 Facebook!

ORACLE自定function內,如何access不同schema的table

答題得分者是:Mickey
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-01 16:48:15 IP:221.224.xxx.xxx 訂閱
 ORACLE 8.0.5
1. 我create一個function,在function內入須access到另一schema的table, create無法成功.
請問我的function要如何編寫
編輯記錄
taishyang 重新編輯於 2007-06-01 19:26:32, 註解 將文章分類成[問題]‧
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-01 17:07:47 IP:59.124.xxx.xxx 未訂閱
將該 TABLE 權限GRANT 給你 Function 的 Schema即可!!

------
Fishman
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-01 17:24:38 IP:221.224.xxx.xxx 訂閱
權限都OK,我用具有DBA的權限create還是不行
我在SQL/PLUS的worksheet下,用function的schema可以access不同 schema的table,
但是create成function就失敗.
function內如果是access同一schema的table就可create成功,但function內如果含有不同schema的table,create就失敗
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-01 17:32:23 IP:59.124.xxx.xxx 未訂閱
方便 POST 上 Source Codes &  Error Codes!?
------
Fishman
編輯記錄
Fishman 重新編輯於 2007-06-01 17:36:11, 註解 無‧
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-01 17:46:01 IP:221.224.xxx.xxx 訂閱
原function太複雜,我用簡單的測試如下,

--第1個create成功
CREATE OR REPLACE PROCEDURE testfunc AS
bCust customer.cust%type;
BEGIN
select cust into bCust from customer where cust='32168968';
END;
/

--第2毎因customer的schema不同,create失敗
CREATE OR REPLACE PROCEDURE testfunc AS
bCust varchar2(9);
BEGIN
select cust into bCust from twc.customer where cust='32168968';
END;
/

-- 第3個因變數宣告有不同schema,create失敗
CREATE OR REPLACE PROCEDURE testfunc AS
bCust twc.customer.cust%type;
BEGIN
select cust into bCust from customer where cust='32168968';
END;
/

------- 如果我在worksheet直接下 select * from twc.customer是OK的

Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-06-18 12:28:20 IP:218.163.xxx.xxx 訂閱
你好:

Oracle 的 Privilege 有 3 類: Object / System / Role.

DBA Role 擁有的是 System Privilege( select any table )

而你要在 Procedure / Function ( Object ) access 該 table,
需要的是 object privilege.
所以還是需要 grant select on [tablename] to [username]|[public];
daniel
一般會員


發表:12
回覆:20
積分:16
註冊:2002-06-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-06-18 22:14:15 IP:118.161.xxx.xxx 訂閱
Thanks  much
系統時間:2024-05-08 22:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!