任何人都可以解釋爲什麼我們編寫CREATE或REPLACE在PL/SQL中創建存儲過程?爲什麼我們編寫創建/替換PL/SQL中創建過程
2
A
回答
3
或更換,您可以取代已經存在,換句話說一個過程,你不需要刪除這個過程,你想重新創建
1
1要修改程序而不必每次重新創建「創建或替換'你必須在兩個步驟中刪除並重新創建對象本身。
2的主要原因是保護對象補助:
SQL> connect to hr
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as hr
SQL>
SQL> create procedure dummy
2 as
3 begin
4 null;
5 end dummy;
6/
Procedure created
SQL> grant execute on dummy to bps;
Grant succeeded
SQL> connect bps
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as bps
SQL> select * from user_tab_privs_recd where table_name ='DUMMY';
OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
HR DUMMY HR EXECUTE NO NO
SQL> exec hr.dummy;
PL/SQL procedure successfully completed
SQL> connect hr
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as hr
SQL> create or replace procedure dummy
2 as
3 begin
4 null;
5 dbms_output.put_line('dummy');
6 end;
7/
Procedure created
SQL> select * from user_tab_privs_made where table_name ='DUMMY';
GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
BPS DUMMY HR EXECUTE NO NO
SQL> connect bps
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as bps
SQL>
SQL> select * from user_tab_privs_recd where table_name ='DUMMY';
OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
HR DUMMY HR EXECUTE NO NO
SQL> set serveroutput on
SQL> exec hr.dummy;
dummy
PL/SQL procedure successfully completed
SQL> connect hr
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as hr
SQL> drop procedure dummy;
Procedure dropped
SQL> create procedure dummy
2 as
3 begin
4 null;
5 dbms_output.put_line('dummy');
6 end;
7/
Procedure created
SQL> -- as you can see priviliges previously made are gone
SQL> select * from user_tab_privs_made where table_name ='DUMMY';
GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- ---------
SQL> connect bps
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as bps
SQL> select * from user_tab_privs_recd where table_name ='DUMMY';
OWNER TABLE_NAME GRANTOR
------------------------------ ----------------------------------------
SQL> exec hr.dummy;
begin hr.dummy; end;
ORA-06550: line 2, column 7:
PLS-00201: identifier 'HR.DUMMY' must be declared
ORA-06550: line 2, column 7:
PL/SQL: Statement ignored
SQL>
2
REPLACE關鍵字可以修改數據庫對象已經存在。
考慮下面的例子,然後你明白地理解。
CREATE PROCEDURE pr_greetings
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello');
END;
OUTPUT:
PROCEDURE PR_GREETINGS compiled
如果我們試圖擅自修改,REPLACE關鍵詞,我們得到錯誤, 所以我應該放棄它,並重新創建它。 見下文。
CREATE PROCEDURE pr_greetings ``
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
END;
OUTPUT:
ORA-00955: name is already used by an existing object
現在有了,REPLACE關鍵詞,我們可以修改
CREATE or REPLACE PROCEDURE pr_greetings
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
END;
OUTPUT:
PROCEDURE PR_GREETINGS compiled.
我希望您清楚瞭解, 謝謝。
相關問題
- 1. 爲什麼我們創建一個PoolableConnectionFactoryObject
- 2. 將外部表創建指令轉換爲PLSQL過程出錯
- 3. 爲什麼人們爲編程語言創建標準
- 4. 爲什麼Apple創建ivars如果@synthesize創建它們?
- 5. 爲什麼他們創建超時
- 6. 爲什麼我們需要爲openstack創建localrc文件
- 7. 通過編程創建UINavigationController
- 8. 創建編程
- 9. 爲什麼我們創建沒有功能的對象?
- 10. 爲什麼我們需要SvcUtil.exe來創建/生成代理類
- 11. 爲什麼我們需要創建模擬對象?
- 12. 爲什麼我們在創建任何模型時使用req.body?
- 13. MYSQL:爲什麼我不能創建表
- 14. 在創建plsql過程中的表時出錯
- 15. 爲什麼我的Unity IoC不能爲我創建課程?
- 16. 創建合併提交替換我們的主題
- 17. 爲什麼我們創建新線程並使用join()使父線程等待?
- 18. 什麼是Android以及他們爲什麼創建新的VM?
- 19. 創建過程
- 20. 爲什麼我們不使用*,而我們創建NSRange的對象
- 21. 爲什麼我們不能創建我們自己的ostream對象
- 22. 我們爲什麼要加()當我們創建一個空數組
- 23. 爲我的程序編寫用於創建CardLayouts的Java類
- 24. Rails遠程窗體,創建後替換
- 25. 創建或替換角色?
- 26. 爲什麼我們需要編寫log.isDebugEnabled?
- 27. 如何從JDBC創建或替換Oracle中的過程?
- 28. 我們可以通過編程創建xib(包含視圖)嗎?如果否,爲什麼&如果是,如何?
- 29. 什麼樣的軟件庫可以通過編程創建photomosaics?
- 30. 通過jQuery創建Textarea - 但不可編輯,爲什麼?