儲存過程與函式
儲存過程:沒有直接返回值,主要用於執行操作。
① 建立語法
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END;
/
② is與as有什麼區別?
- 在儲存過程與函式中,is與as沒有任何區別
- 在檢視中只能用as,在遊標中只能用is
③ 建立儲存過程的一些小細節
- 無參儲存過程定義時儲存過程名後面一定不能加括號!!!報錯:Warning: Function created with compilation errors
- 無參儲存過程呼叫時可以加括號也可以不用加,可以通過PL/SQL呼叫,也可以通過execute關鍵字呼叫
- 有參儲存過程的引數型別一定不能指定精度!!!否則報錯:Warning: Procedure created with compilation errors
- 利用 表名.欄位%type 可以取到表中某個欄位的具體型別,方便給我們宣告的變數時設定它的型別 如 price page_books.price%type;
- 無參儲存過程呼叫時可以加括號也可以不用加,可以通過PL/SQL呼叫,也可以通過execute關鍵字呼叫
- 有參儲存過程的引數型別一定不能指定精度!!!否則報錯:Warning: Procedure created with compilation errors
- 利用 表名.欄位%type 可以取到表中某個欄位的具體型別,方便給我們宣告的變數時設定它的型別 如 price page_books.price%type;
④ 利用PL/SQL DEVELOPER工具執行儲存過程時,如果儲存過程中有輸出內容想要看到,必須先執行下面的命令:
set serveroutput on;
⑤ 例:建立有參儲存過程
CREATE PROCEDURE addBook(title in varchar2,price in number,author in varchar2,pt in date)
AS
BEGIN
insert into page_books (title,price,author,publish_date) values(title,price,author,pt);
END;
/
呼叫有參儲存過程
- 方式一
DECLARE
title page_books.title%type := 'title18';
price page_books.price%type := 50.55;
author page_books.author%type := 'author18';
pt page_books.publish_date%type := sysdate;
BEGIN
addBook(title,price,author,pt);
END;
/
- 方式二EXECUTE addBook('book19',100,'author19',sysdate);
例:建立無參儲存過程
CREATE PROCEDURE sayHello
IS
BEGIN
DBMS_OUTPUT.put_line('Hello!');
END;
/
呼叫無參儲存過程
- 方式一
BEGIN
sayHello();
END;
/
- 方式二BEGIN
sayHello;
END;
/
- 方式三EXECUTE sayHello;
-方式四EXECUTE sayHello();
函式:返回一個值,主要用於計算並返回一個值。
①建立函式的小細節
- 函式必須包含一個return語句
- RETURN 子句指定要在函式返回的資料型別
- 函式定義的時候,無參函式名後面一定不能加括號!!!報錯:Warning: Function created with compilation errors
- 函式呼叫的時候無參函式方法名後面可以不用加括號,有參必須加
- RETURN 子句指定要在函式返回的資料型別
- 函式定義的時候,無參函式名後面一定不能加括號!!!報錯:Warning: Function created with compilation errors
- 函式呼叫的時候無參函式方法名後面可以不用加括號,有參必須加
② 例:建立有參函式
CREATE FUNCTION mul(x in double precision,y in double precision)
RETURN double precision
IS
result double precision;
BEGIN
result := x*y;
RETURN result;
END;
/
呼叫有參函式
DECLARE
a double precision;
BEGIN
a:=mul(2,10);
DBMS_OUTPUT.put_line(a);
END;
/
例:建立無參函式
CREATE FUNCTION totalBooks
RETURN number
IS
totalBooks number;
BEGIN
select count(id) INTO totalBooks from page_books;
RETURN totalBooks;
END;
/
呼叫無參函式
DECLARE
a number;
BEGIN
a:=totalBooks();
DBMS_OUTPUT.put_line(totalBooks);
END;
/
關於上述用到的page_books表的相關資訊如下圖
![](https://i.iter01.com/images/67ca6f4bf518fe97c407d31a21a0788faa6e5de6178c465698cc04a332bdda32.png)
相關文章
- 儲存過程與儲存函式儲存過程儲存函式
- mySql 儲存過程與函式MySql儲存過程函式
- MySQL自定義函式與儲存過程MySql函式儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- SQL server儲存過程函式SQLServer儲存過程函式
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- openGauss 函式及儲存過程支援函式儲存過程
- 儲存過程vs.函式QM儲存過程函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- 函式儲存過程併發控制-案例函式儲存過程
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- day25-索引和函式及儲存過程索引函式儲存過程
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- [20190118]toad下如何除錯儲存過程和函式.txt除錯儲存過程函式
- mpp_123@163.com 變數儲存過程函式控制流程變數儲存過程函式
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- 儲存過程——公用表表示式(CTE)儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL--儲存過程與檢視MySql儲存過程
- SqlServer儲存過程的建立與使用SQLServer儲存過程
- 【MSSQL】sqlserver 各種判斷是否存在(表名、函式、儲存過程.......)SQLServer函式儲存過程
- 瞭解使用mysql 的檢視、儲存過程、觸發器、函式....MySql儲存過程觸發器函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- JavaWeb——JDBC八股文、JSBC使用儲存過程、儲存函式、處理CLOB/BLOB型別JavaWebJDBCJS儲存過程儲存函式型別
- [20180502]PLDEVELOP與儲存過程除錯.txtdev儲存過程除錯
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程