數據庫系統原理(第5章:數據庫編程)

一、存儲過程

概念:存儲過程是一組為了完成某項特定功能的SQL語句集, 其實質就是一段存儲在數據庫中的代碼。 它可以由聲明式的sql語句和過程式sql語句組成。

特點:

  • 可增強SQL語言的功能和靈活性
  • 良好的封裝性
  • 高性能
  • 可減少網絡流量
  • 可作為一種安全機制來確保數據庫的安全性和數據的完整性

用戶定義的結束符(ELIMITER

  • ELIMITER $$:
  • 例句:將MySQL結束符修改為兩個感嘆號“!!”? (DELIMITER !!)

使用CREATE PROCEDURE語句創建存儲過程:CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body ;

proc_paramete:指定存儲過程的參數列表

routine_body:存儲過程的主體部分,也稱為存儲過程體

[IN | OUT | INOUT] param_name type:參數?名,參數類型

例如:在mysql_test中創建一個存儲過程,用于實現給定表customers中一個客戶id號即可修改表customers中該客戶的性別為一個指定的性別

?

?

?

使用DECLARE語句聲明局部變量:DECLARE var_name[,…] type [DEFAULT value]

例如:聲明一個整型局部變量cid:? ?DECLARE cid INT(10);

使用DECLARE語句聲明局部變量的規范

  • 1)只能在存儲過程體的BEGIN…END語句塊中聲明;
  • 2)必須在存儲過程的開頭處聲明;
  • 3)作用范圍僅限于聲明它的BEGIN…END語句塊;
  • 4)不同于用戶變量

局部變量與用戶變量的區別:

  • 1)局部變量聲明時,在其前面沒有@符號,并且它只能 被聲明它的BEGIN…END語句塊中的語句所使用;
  • 2)用戶變量在聲明時,會在其名稱前面使用@符號,同 時已聲明的用戶變量存在于整個會話之中。

使用SET語句為局部變量賦值:SET var_name=expr[,var_name=expr]…? ? ? ? ? ? ? ??SET cid=910;

使用SELECT…INTO語句把選定列的值直接存儲到局部變量中

?

?

流程控制語句

  • 1、條件判斷語句 IF…THEN …ELSE語句 CASE語句? ?(IF 條件 THEN 表達式1 ELSE 表達式2 END IF;)
  • 2、循環語句 WHILE語句 REPEAT語句 LOOP語句

WHILE 條件 表達式 END WHILE

repeat 表達式 END repeat

loop 表達式 END loop

ITERATE語句 用于表示退出當前循環

****************************游標CURSOR*****************************************

使用DECLARE CURSOR語句創建游標

?

?

?

使用OPEN語句打開游標:OPEN cursor_name

使用FETCH…INTO語句讀取數據:

?

?

?

使用CLOSE語句關閉游標 :CLOSE cursor_name

**********************存儲過程的使用************************

使用CALL語句調用存儲過程

?

?

?調用數據庫mysql_test中的存儲過程sp_update_sex,將客戶id號為909的客戶性別修改為男性“M”

CALL sp_update_sex(909,’M’);

使用DROP PROCEDURE語句刪除存儲過程

DROP PROCEDURE[IF EXISTS] sp_name

二、存儲函數

存儲函數與存儲過程一樣,是由SQL語句和過程式語句組成的代碼片段

使用CREATE FUNCTION語句創建存儲函數

CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body

  • sp_name:指定存儲函數的名稱
  • func_parameter:指定存儲函數的參數
  • RETURNS type :聲明存儲函數返回值的數據類型; type指定返回值的數據類型
  • ?routine_body 指定存儲函數的主體部分,也稱為存儲函數體

在數據庫mysql_test中創建 一個存儲函數,要求該函數能根據 給定的客戶id號返回客戶的性別, 如果數據庫中沒有給定的客戶id號 ,則返回“沒有該客戶”。

Use mysql_test;
DELIMITER $$
CREATE FUNCTION fn_search(cid INT)
RETURNS CHAR(20)
DETERMINISTIC
BEGIN
DECLARE SEX CHAR(20);
SELECT cust_sex INTO SEX FROM customersWHERE cust_id=cid;
IF SEX IS NULL THEN
RETURN(SELECT’沒有該客戶’);
ELSE IF SEX=‘F’ THEN
RETURN(SELECT’女’);ELSE RETURN(SELECT ‘男’);END IF;END IF;
END $$

?

?

?使用關鍵字SELECT調用存儲函數:SELECT sp_name([func_parameter[, …]])

使用DROP FUNCTION語句刪除存儲函數:DROP FUNCTION [IF EXISTS] sp_name

轉載于:https://www.cnblogs.com/jalja/p/11611440.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248046.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

科學-中醫:儒醫

ylbtech-科學-中醫:儒醫"儒醫"是一種歷史悠久的社會文化現象。闡釋了"儒醫"的三重境界,即良醫、大醫、圣醫。"良醫"注重技,屬于知識論,追求的是"真";"大醫"注重德,屬于道德論,追求的是"善";"圣醫…

Ajax — 第六天

Ajax-06 GET和POST的區別 字面意思不同 GET 是獲取意思。想從服務器獲取數據,用GET方式的請求POST是郵遞、郵寄意思。如果提交數據到服務器,用POST方式 請求參數位置不同 GET 請求參數會和url拼接到一起,形如 api/getbooks?id2&age3PO…

iOS Tips 模擬器屏幕截圖

當我們發布app到AppStore的時候,在itunes connect里面,蘋果官方要求我們提供各種尺寸的屏幕截圖。由于受到硬件條件的限制,我們不可能在每個真實的物理機器上測試并截圖,相反如果我們能直接在模擬器上進行屏幕截圖的話&#xff0c…

數據庫系統原理(第6章:數據庫安全與保護)

一、數據庫完整性 數據庫完整性是指數據庫中數據的正確性和相容性。 完整性約束條件的作用對象 列級約束: 包括對列的類型、取值范圍、精度等的約束元組約束: 指元組中各個字段之間的相互約束表級約束: 指若干元組、關系之間的聯系的約束定義…

.net core WebApi 使用Swagger生成API文檔

關于 Swagger Swagger能成為最受歡迎的REST APIs文檔生成工具之一,有以下幾個原因: Swagger 可以生成一個具有互動性的API控制臺,開發者可以用來快速學習和嘗試API。Swagger 可以生成客戶端SDK代碼用于各種不同的平臺上的實現。Swagger 文件可…

Git — 初體驗

準備工作 版本管理軟件 作用 記錄代碼的版本實現多人協作 分類 集中式,典型代表 SVN分布式,典型代表 Git 注冊遠程倉庫賬號 遠程倉庫相當于中央服務器我們需要在github上或碼云上注冊一個賬號,用于創建遠程倉庫使用注冊的時候&#xff0…

iOS CoreTelephony框架介紹與使用案列

昨晚看一篇文章時看到了私有API這個詞,貌似開發者對私有API的使用很反感于是果斷百度谷歌,以下是Stackoverflow中關于Private Frameworks的一個解釋: Private frameworks are frameworks which you are not allowed to use. They are not exp…

JS數組的迭代器方法

迭代器forEachevery一、迭代器方法 迭代器方法, 這些方法對數組中的每一個元素應用一個函數,可以返回一個值,一組值或一個新數組。 不生成新數組的迭代器方法 1.forEach() forEach()輸出 forEach輸出結果2.every() 該方法按接受一個返回值為布…

Git 筆記

三個區域 下面三個區域,是Git虛擬的區域,看不到,摸不著。 工作區 工作區,指的是使用Git管理后的文件,這些文件顯示在磁盤上,供我們使用或修改的區域。所以,粗略的說,項目文件夾就是…

C# webapi 上傳下載圖片

客戶端上傳文件 string url url "webUploadFile";Uri server new Uri(url);HttpClient httpClient new HttpClient();MultipartFormDataContent multipartFormDataContent new MultipartFormDataContent();StreamContent streamConent new StreamContent(new F…

OC-@dynamic 關鍵字

dynamic這個關鍵詞,通常是用不到的。 它與synthesize的區別在于: 使用synthesize編譯器會確實的產生getter和setter方法,而dynamic僅僅是告訴編譯器這兩個方法在運行期會有的,無需產生警告。 假設有這么個場景,B類&…

git -- 練習的筆記

gitgitee.com:my_exercises/my_exercises.githttps://gitee.com/my_exercises/my_exercises/invite_link?invite3ab56c724a0aed34ae2bd193ce87e741e67fe05ee029cc01b7993663152babc57d76203fdafbbb42e766b0d826817bc91.在任意位置右鍵打開 2.初始化設置 3.添加遠程倉庫地址 4.…

Swift傻傻分不清楚系列(十二) 屬性

本頁包含內容: 存儲屬性(Stored Properties)計算屬性(Computed Properties)屬性觀察器(Property Observers)全局變量和局部變量(Global and Local Variables)類型屬性&a…

GIT — 使用回顧

回顧Git的使用 記錄每次的變更 工作區 --> 暫存區 git add . / git add 文件 文件夾 .... 工作區 --> 暫存區/本地倉庫 前提條件:文件曾經被添加到暫存區或提交到倉庫git commit -a -m 提交說明 暫存區 --> 本地倉庫 git commit -m 提交說明 / git commi…

獲取兩個數百分比的值

1 /**2 * 獲取兩個數百分比的值3 * 4 * param num1 5 * param num26 * param retain 保留小數位數7 * return8 */9 public static String numberFormat(int num1, int num2, int retain) { 10 NumberFormat numberFormat …

iOS AVAudioPlayer和AVAudioPlayerDelegate-音頻播放處理中斷

學習總是在進行。 一、AVAudioPlayer如何處理中斷 AVAudioPlayer類提供了代理方法&#xff0c;用來處理當播放音頻文件時&#xff0c;發生來電、鬧鐘等事件。設置代理并遵守AVAudioPlayerDelegate協議,<span style"font-family: Arial, Helvetica, sans-serif;"&g…

Ajax — 大事件項目(第一天)

應用的前端技術 Ajax (重要) — jQuery方式接口請求Layui 框架使用HTML CSS JS 項目說明和演示 線上 DEMO 項目地址&#xff1a;http://www.liulongbin.top:8086/項目的 API 接口地址&#xff1a; https://www.showdoc.cc/escook?page_id3707158761215217 項目請求根路徑…

JS,JQ 格式化小數位數

在<script>中&#xff1a; $(function(){   var num$(".price").length;/*獲取應用了class"price"的標簽數量*/   for(var i0;i<num;i){     if($(".price")[i].innerText!"")       $(".price")[i]…

iOS開發實用技巧—Objective-C中的各種遍歷(迭代)方式

說明&#xff1a; 1&#xff09;該文簡短介紹在iOS開發中遍歷字典、數組和集合的幾種常見方式。 2&#xff09;該文對應的代碼可以在下面的地址獲得&#xff1a;https://github.com/HanGangAndHanMeimei/Code 一、使用for循環 要遍歷字典、數組或者是集合&#xff0c;for循環是…

windows系統作為客戶端時,linux中本地yum源掛載時,如何同時掛載DVD1和DVD2?

這里以CentOS6.5為例.他的鏡像有兩個DVD1和DVD2.DVD1中是系統和主要的安裝包,DVD2中是剩下的安裝包 當掛載時如果要同時掛載DVD1和DVD2.需要這樣做: 1)在虛擬機的設置中選擇連接 2)分別在mnt下創建cdrom和cdrom1文件夾 3)到dev下查看有軟連接 cdrom->sr0 cdrom1->sr1 這里…