2014-10-07 215 views
0

[說明]
如果我想創建一個屬於模式'A'的函數,我的理解是我需要在模式'A'中創建包,並實現功能。 (如果還有其他方法可以改正,請糾正我)。
如果我試圖創建一個使用腳本文件(例如:新建庫 - > SQL文件(數據庫文件)來創建untitled.sql)函數,我感到困惑,因爲該函數不屬於任何模式,它將存儲在Global中。Oracle SQL Developer - 使用腳本創建函數

[問題]
1)如何使用腳本創建屬於模式'A'的函數?
2)全局存儲的函數無法訪問模式表,我該如何解決?

enter image description here

+0

使用GUI的IMO不是一個可持續的解決方案。用你最喜歡的文本編輯器編寫一個函數代碼;將文件保存爲純文本文件到版本控制系統中;使用SQL * Plus從命令行運行/執行文件到數據庫中。 GUI非常適合讀取數據庫,但不能直接在具有GUI的數據庫中創建/修改PL/SQL代碼。 – user272735 2014-10-08 05:05:16

回答

3

我完全同意阿斯卡洛尼安。爲了您的問題,我將提供有關如何使用SQL Developer的GUI工具創建函數的說明,這將生成一個腳本。

在很多方面,我寧願使用SQL * Plus。爲了我的例子,我將使用標準的Oracle示例模式SCOTT。

問題1:如何創建一個功能使用腳本

注:我展示瞭如何使用GUI工具SQL Developer創建這個功能,他們生成一個腳本

如果你是登錄到數據庫用戶,SCOTT,只是用戶SCOTT的功能,點擊右鍵並選擇「新功能」

enter image description here

「創建功能」對話框將打開。 enter image description here

您只需修改名稱以符合您的命名約定和您的項目。選擇您的選項並選擇確定。 在代碼編輯器接下來,修改功能更適合您的需要: enter image description here

這是我的最終草案。選擇'編譯': enter image description here

現在它顯示並顯示爲SCOTT擁有的函數對象。 GUI工具將生成一個腳本函數,但不會限制SCOTT的所有權。如果沒有資格,默認情況下該功能由SCOTT擁有。 :

enter image description here

如果我調用這個函數在一個SQL開發工作身份登錄SCOTT,我們在這裏看到: enter image description here

在一般情況下,如果要與所有用戶共享的對象,標準方法是將執行授予公衆或創建公共同義詞。這裏是授予執行公共的例子:

enter image description here

就可以檢查你與其他用戶的權限:

enter image description here

在一般情況下,使用該GUI 工具是好的和幫助你得到正確的語法。過了一段時間,你可能會放棄這個(相當緩慢和麻煩)。

問題2:全局存儲的函數無法訪問模式表,我該如何解決?

有許多方法可以解決如何授予對錶的選擇訪問權限。

以我的示例,可以將表上的選擇授予功能所有者SCOTT。

你能做到這一點是這樣的:

GRANT SELECT ON OTHER_SCHEMA.PRECIOUS_TABLE TO SCOTT;

另一種常見的方法可能是授予系統權限,SELECT ANY TABLE,斯科特。當然,應該始終考慮安全問題,並且應該堅持授予最少量特權來完成任務的原則。

+0

這是真棒解釋!非常感謝你PATRICK! – Adrian 2014-10-08 14:33:35

+0

快速的問題。我函數的返回值類型是別的(不是Varchar或數字),所以我需要實現 「創建或替換類型My_Return_Type作爲對象」。我如何在該工作表中包含? – Adrian 2014-10-08 14:43:18

+0

GUI不公開所有架構所有者擁有的所有對象類型,因此您需要在沒有GUI的情況下執行此操作。我會在您希望使用它的模式中創建對象類型,然後使用該對象返回類型聲明您的函數。 – 2014-10-08 15:02:13

3

你並不需要使用一個包來創建一個函數。函數可以是獨立的對象。

創建函數的腳本可以通過閱讀關於如何創建函數的Oracle Documentation來找到。

要在特定模式下創建它,只需將模式名稱添加到函數名稱或以其他用戶身份登錄。

注:如果您在其它模式中創建一個功能,你需要有CREATE ANY PROCEDURE特權。

+0

我很感謝您的幫助!如果可能,你能否向我解釋更多關於'CREATE ANY PROCEDURE privilege'的信息? – Adrian 2014-10-08 14:34:51

+0

根據您在數據庫中的權限,您可以自己授予DBA用戶帳戶的特權。在您可以在另一個模式中創建函數之前,您需要被授予該權限。 – Ascalonian 2014-10-08 16:03:42