任何人都可以解釋爲什麼我們編寫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. 爲什麼人們爲編程語言創建標準
- 3. 將外部表創建指令轉換爲PLSQL過程出錯
- 4. 創建在PLSQL
- 5. 爲什麼Apple創建ivars如果@synthesize創建它們?
- 6. 爲什麼他們創建超時
- 7. 爲什麼我在ActionMailer中創建Devise :: RegistrationsController#創建NoMethodError?
- 8. 爲什麼我們在創建存儲庫時需要創建xxxCustom和xxxImpl類?
- 9. 爲什麼我們需要創建存儲過程進行備份?
- 10. 爲什麼我們需要創建一箇中斷向量表?
- 11. 我們爲什麼要在Java中創建POJO的Serializable?
- 12. 爲什麼我們需要爲openstack創建localrc文件
- 13. 通過編程創建UINavigationController
- 14. 通過替換整數創建數組
- 15. 在Codeigniter中hook的用途是什麼?爲什麼我們必須創建?
- 16. 創建編程
- 17. 的iOS:編程創建創建程序
- 18. PLSQL:創建 「分層」 表
- 19. 爲什麼我們需要創建模擬對象?
- 20. 爲什麼我們使用Model.new來創建def和def?
- 21. 爲什麼我們使用反射創建對象
- 22. 爲什麼我們需要SvcUtil.exe來創建/生成代理類
- 23. 爲什麼我們要創建類的實例?
- 24. 爲什麼我們需要創建原生查詢?
- 25. 爲什麼創建集合,如果我們已經有集合?
- 26. 爲什麼我們在創建任何模型時使用req.body?
- 27. 爲什麼我們使用char數組來創建緩衝區
- 28. 爲什麼我們創建沒有功能的對象?
- 29. 爲什麼我無法創建日曆?
- 30. MYSQL:爲什麼我不能創建表