2017-02-11 112 views
0

我在Oracle中創建存儲過程,其中一個是永久創建的,另一個是在服務其目的後暫時創建並消失。如何使用它,請指導您何時使用以及如何使用它創建。臨時和永久存儲過程

----這不是在DB創建的,只是暫時創建,消失

DECLARE name varchar2(10); 
PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
BEGIN 
    name := 'Joe'; 
    printVal(name); 
END; 
/

----這在DB創建永久可用

create PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
+0

我認爲你是困惑,因爲第一個匿名塊包含PL/SQL [子程序](https://docs.oracle.com/cloud/latest /db112/LNPLS/subprograms.htm#LNPLS008),它定義了名稱(printVal)。但是因爲它存在於匿名塊中,所以它不存儲在數據庫中。 – tbone

+0

感謝您的答覆和答案。 – sunleo

回答

4

瞭解,在兩個部分劃分您的SQL。

存儲過程:

  • 存儲過程都存儲在數據庫中。
  • 我們可以調用存儲過程創建之後的任何時間。
  • 存儲過程還支持輸入輸出參數。

匿名塊:

  • 這些是未命名的PL/SQL塊。
  • 匿名塊不存儲在數據庫中。
  • 不能通過paramters

---------- Stored Procedure Start-------- 

DECLARE name varchar2(10); 
PROCEDURE printVal (name varchar2) IS 
BEGIN 
    dbms_output.put_line ('name:' || name); 
END; 
--------- Stored Procedure End----------- 

----------anonymous block Start---------- 
BEGIN 
    name := 'Joe'; 
    printVal(name); 
END; 
/
----------anonymous block end ------------ 
+0

你的意思是不能傳遞參數?在我的第一個例子中,我們將價值傳遞給SP臨時創建。 – sunleo

+0

「無法傳遞參數」 - 我的意思是我們無法在匿名塊中定義輸入輸出參數,就像我們在存儲過程中定義的那樣。 – Tajinder

+0

該示例中的程序不被存儲,所以它不是一個存儲過程。另外值得一提的是,只有一些客戶端工具需要'/'字符來指示輸入結束和執行指令,而不是PL/SQL語言的一部分。 –