欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文

      時(shí)間:2019-05-15 07:57:16下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文》。

      第一篇:第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文

      第5章 視圖、存儲(chǔ)過程和用戶自定函數(shù)

      1.什么是基本表?什么是視圖?兩者的區(qū)別和聯(lián)系是什么?

      答:

      基本表是本身獨(dú)立存在的表,在 sQL 中一個(gè)關(guān)系就對應(yīng)一個(gè)表。視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表。視圖本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫中,是一個(gè)虛表。即數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。視圖在概念上與基本表等同,用戶可以如同基本表那樣使用視圖,可以在視圖上再定義視圖。.試述視圖的優(yōu)點(diǎn)。

      (l)視圖能夠簡化用戶的操作;(2)視圖使用戶能以多種角度看待同一數(shù)據(jù);(3)視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨(dú)立性;(4)視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。.所有的視圖是否都可以更新?為什么?

      答:

      不是。視圖是不實(shí)際存儲(chǔ)數(shù)據(jù)的虛表,因此對視圖的更新,最終要轉(zhuǎn)換為對基本表的更新。因?yàn)橛行┮晥D的更新不能惟一有意義地轉(zhuǎn)換成對相應(yīng)基本表的更新,所以,并不是所有的視圖都是可更新的.4 .哪類視圖是可以更新的?哪類視圖是不可更新的?各舉一例說明。

      答:基本表的行列子集視圖一般是可更新的。若視圖的屬性來自集函數(shù)、表達(dá)式,則該視圖肯定是不可以更新的。

      5.教材P89習(xí)題1-5。

      第二篇:SQL Sever 2005教案第13章 存儲(chǔ)過程及自定義函數(shù)

      什么是存儲(chǔ)過程,在存儲(chǔ)在服務(wù)器上的T-SQL語句的命名集合,是封裝性任務(wù)的方法,支持變量及條件的編程。

      SQL Server的存儲(chǔ)過程與其他編程語言中的過程(包括函數(shù))類似,可以包含數(shù)據(jù)庫操作(調(diào)用其他過程)的編程語句,可以接受參數(shù),可以返回狀態(tài)值以表明成功或失敗,以輸出參數(shù)的形式將多個(gè)值返回至調(diào)用過程

      SQL Server支持五種類型的存儲(chǔ)過程:

      系統(tǒng)存儲(chǔ)過程(sp_):存儲(chǔ)在master數(shù)據(jù)庫中。

      本地存儲(chǔ)過程:在單獨(dú)的用戶數(shù)據(jù)庫中。

      臨時(shí)存儲(chǔ)過程:局部的以#開頭,全局的以##開頭。

      遠(yuǎn)程存儲(chǔ)過程:分布式查詢支持此功能。

      擴(kuò)展存儲(chǔ)過程:在SQL Server環(huán)境外執(zhí)行。

      存儲(chǔ)過程的優(yōu)點(diǎn) 封裝商務(wù)邏輯,若規(guī)則或策略改變只需修改存儲(chǔ)過程就可以直接使用,屏蔽數(shù)據(jù)庫的詳細(xì)資料,用戶不需要訪問底層數(shù)據(jù)庫和數(shù)據(jù)庫對象。提供安全機(jī)制,只需要提供存儲(chǔ)過程的權(quán)限而不需要提供整個(gè)數(shù)據(jù)庫中數(shù)據(jù)的一個(gè)權(quán)限。另外,存儲(chǔ)過程能夠通過預(yù)編譯的語句來確定執(zhí)行哪一部分而不是都執(zhí)行。在傳輸過程中傳輸?shù)拇鎯?chǔ)過程而不是數(shù)據(jù),減少了通信量,能夠?qū)崿F(xiàn)一個(gè)較快的執(zhí)行速度。

      create proc liuhaoran as select price from titles where price>15 select title from titles where price<=15

      在存儲(chǔ)過程里可以包含任何數(shù)目和類型的T-SQL語句,但不能包含create proc、create trigger、create view 執(zhí)行創(chuàng)建存儲(chǔ)過程的用戶必須是sysadmin、db_owner 或 db_ddladmin角色的成員,或必須擁有 CREATE PROCEDURE 權(quán)限 存儲(chǔ)過程有大小的限制,最大為128M

      存儲(chǔ)過程可以傳遞參數(shù),創(chuàng)建存儲(chǔ)過程,定義兩個(gè)浮點(diǎn)型的參數(shù),無返回值 CREATE PROCEDURE titlespro @Beginningprice float,@Endingprice float AS IF @Beginningprice IS NULL OR @Endingprice IS NULL BEGIN

      print 'no price is exits'

      RETURN END SELECT price FROM titles WHERE price BETWEEN @Beginningprice AND @Endingprice GO

      /*執(zhí)行語句,輸入兩個(gè)價(jià)格值作為參數(shù)值*/ exec titlespro 10,19

      指定參數(shù)的依據(jù)和指導(dǎo)原則

      所有的輸入?yún)?shù)值都應(yīng)該在存儲(chǔ)過程開始的時(shí)候進(jìn)行檢查,以盡早捕獲缺失值和非法值

      應(yīng)該為參數(shù)提供合適的默認(rèn)值,可以未指定參數(shù)值的基礎(chǔ)上執(zhí)行存儲(chǔ)過程

      一個(gè)存儲(chǔ)過程最多可以有1024個(gè)參數(shù)

      不同存儲(chǔ)過程可以使用相同的參數(shù)名 使用參數(shù)的指導(dǎo)原則

      可以使用@參數(shù)=值的格式來指定參數(shù),此方法可以按任意順序來傳遞參數(shù)

      對于有默認(rèn)值的參數(shù)在調(diào)用存儲(chǔ)過程的過程中可以不指定參數(shù)值

      存儲(chǔ)過程可以使用輸出參數(shù)

      --創(chuàng)建存儲(chǔ)過程輸入兩個(gè)輸入?yún)?shù),定義一個(gè)輸出參數(shù) CREATE PROCEDURE Mathadd @m1 int, @m2 int, @result int OUTPUT--定義輸出參數(shù) AS SET @result=@m1+@m2 GO

      調(diào)用過程如下:

      declare @resultvalues int

      exec mathadd 12,16,@resultvalues output--輸出參數(shù)的值賦給變量 print 'The result is: '+convert(char,@resultvalues)

      存儲(chǔ)過程通過輸出參數(shù)向調(diào)用它的存儲(chǔ)過程或客戶端返回信息,通過輸出參數(shù),存儲(chǔ)過程的運(yùn)行結(jié)果可以保留到程序運(yùn)行結(jié)束。輸出參數(shù)接受需要注意:

      調(diào)用語句必須包含一個(gè)變量名,以接受返回值。

      可以在T-SQL語句中使用返回變量 輸出參數(shù)可以是任意類型,除了text和image 輸出參數(shù)可以是游標(biāo)

      對于已經(jīng)創(chuàng)建好的存儲(chǔ)過程,如果存儲(chǔ)過程需要修改,可以顯式地重新編譯,但應(yīng)盡量少做。

      在創(chuàng)建存儲(chǔ)過程之前通常會(huì)檢查此存儲(chǔ)過程是否存在,如果存在可以選擇刪除后重建,或改變名字

      IF EXISTS(SELECT name FROM sysobjects WHERE name='author_infor' AND type='p')DROP PROCEDURE author_infor GO

      修改存儲(chǔ)過程使用關(guān)鍵字alter

      alter procedure pro_titles @values money--修改存儲(chǔ)過程pro_titles as select price,pub_id from titles where price=@values go

      刪除存儲(chǔ)過程使用關(guān)鍵字drop proc,因?yàn)榇鎯?chǔ)過程屬于數(shù)據(jù)庫對象

      drop procedure pro_titles

      對于數(shù)據(jù)庫中的所有存儲(chǔ)過程或者觸發(fā)器,如果需要將其全部重新編譯,那么可以使用以下語句,EXEC sp_recompile titles--重新編譯所有的存儲(chǔ)過程或者觸發(fā)器

      在程序中通常會(huì)出現(xiàn)因?yàn)檫\(yùn)行錯(cuò)誤而出現(xiàn)的各種錯(cuò)誤提示,其大部分都不能被用戶容易讀懂,因此可以自定義錯(cuò)誤信息,來提示用戶錯(cuò)誤的具體原因。--自定義錯(cuò)誤信息

      EXEC sp_addmessage

      @msgnum = 50010,---錯(cuò)誤編號(hào) @severity = 10,----嚴(yán)重級(jí)別

      @msgtext = 'Customer cannot be deleted.',--錯(cuò)誤文本信息 @with_log='true', @lang='us_english'

      創(chuàng)建好自定義錯(cuò)誤信息之后,就可以在程序中使用錯(cuò)誤信息

      --調(diào)用自定義錯(cuò)誤信息

      EXEC sp_addmessage 50010,10,'CustomerID not found.',@replace='replace' USE Northwind GO CREATE PROC UpdateCustomerPhone @CustomerID nchar(5)=NULL, @Phone nvarchar(24)=NULL AS IF @CustomerID IS NULL BEGIN

      PRINT 'You must supply a valid CustomerID.'

      RETURN END /*確認(rèn)提供了合法的CustomerID */ IF NOT EXISTS(SELECT * FROM Customers WHERE CustomerID=@CustomerID)

      BEGIN

      RAISERROR(50010,10,1)--該客戶不存在。

      RETURN

      END BEGIN TRANSACTION UPDATE Customers SET Phone =@Phone WHERE CustomerID=@CustomerID /*顯示CompanyName的電話號(hào)碼已更新的消息*/ SELECT 'The phone number for'+@CustomerID +'has been updated to'+ @Phone COMMIT TRANSACTION GO

      創(chuàng)建存儲(chǔ)過程的方法上面已經(jīng)介紹結(jié)束,如果想要查看存儲(chǔ)過程的代碼,就需要使用到以下的關(guān)鍵字

      --查看存儲(chǔ)過程

      EXEC sp_helptext UpdateCustomerPhone

      而對于以存在的存儲(chǔ)過程,在調(diào)用的過程由于某些原因需要重新命名的化,使用以下語句

      --重命名存儲(chǔ)過程

      EXEC sp_rename reptq1, newproc

      用戶自定義函數(shù)部分

      函數(shù)和存儲(chǔ)過程同樣都有輸入和輸出參數(shù),單數(shù)輸入和輸出參數(shù)的聲明方式有些區(qū)別--創(chuàng)建函數(shù) USE pubs go CREATE FUNCTION WorkYearWage(@hiredate datetime,--hiredate 表示雇傭日期

      @today datetime, @per_wage money)--today 表示當(dāng)前的日期per_wage 表示每一年工齡應(yīng)得的工資額 RETURNS money--返回值類型 AS BEGIN DECLARE @WorkYearWage money SET @WorkYearWage =(year(@today)-year(@hiredate))*@per_wage RETURN(@WorkYearWage)--返回的變量 END--結(jié)束函數(shù)定義 GO-

      使用函數(shù)參數(shù),當(dāng)使用命名函數(shù)的時(shí)候,參數(shù)的次序不必按照在函數(shù)中聲明的次序,但必須包含所有參數(shù),不能省略任何參數(shù)

      使用函數(shù)的過程同以前學(xué)習(xí)過的系統(tǒng)函數(shù)的使用方法想類似,在輸出或查詢語句中使用函數(shù)名及相應(yīng)的床底若干參數(shù)即可。

      --使用函數(shù)

      SELECT pubs.dbo.workyearwage('1991-7-1',getdate(),15)--傳參并輸出結(jié)果

      As work_year_wage

      在函數(shù)的返回值方面可以直接聲明返回參數(shù),或者聲明返回值類型--計(jì)算立方體函數(shù)

      CREATE FUNCTION CubicVolume(@CubeLength decimal(4,1), @CubeWidth decimal(4,1), @CubeHeight decimal(4,1))--定義輸入?yún)?shù) RETURNS decimal(12,3)--定義返回值類型 AS BEGIN RETURN(@CubeLength * @CubeWidth * @CubeHeight)--返回結(jié)果 END

      除特定類型的返回值之外,還可以返回表類型的結(jié)果集

      --內(nèi)聯(lián)表值型用戶自定義函數(shù)

      CREATE FUNCTION orderfirms(@productid INT)--定義一個(gè)整型參數(shù) RETURNS TABLE--返回值為表的結(jié)果集 AS RETURN(SELECT * FROM jobs WHERE min_lvl>@productid)--返回查詢結(jié)果 GO

      或者返回值是一張臨時(shí)表

      --多聲明表值型用戶自定義函數(shù) USE Northwind go CREATE FUNCTION my_function(@regionParameter varchar(25))--定義一個(gè)函數(shù)的參數(shù)

      returns @my_table TABLE--函數(shù)返回值為表的結(jié)果集,并定義表的結(jié)果集如下(city varchar(15)null, companyName varchar(40)not null, contactName varchar(30)null)AS BEGIN INSERT @my_table--從表customers中查詢數(shù)據(jù)插入到@my_table中 SELECT city,companyName,contactName FROM Customers WHERE city=@regionParameter RETURN--返回結(jié)果集 END

      表值函數(shù):

      函數(shù)體內(nèi)只允許如下語句:

      賦值語句

      流程控制語句

      用于定義函數(shù)局部數(shù)據(jù)變量和游標(biāo)的declare語句

      Select語句,將其后的表達(dá)式將賦予函數(shù)的局部變量

      游標(biāo)操作,僅允許使用fetch語句通過into子句給局部變量賦值,不允許使用fetch語句將數(shù)據(jù)返回到客戶端

      針對上面的例子(內(nèi)嵌表值函數(shù))需要注意的是:

      return子句在括號(hào)中包含單個(gè)select語句,select語句的結(jié)果集構(gòu)成函數(shù)所返回的表 函數(shù)體不由begin和end分隔

      Return指定table作為返回的數(shù)據(jù)類型

      不必定義返回變量的格式,因?yàn)樗蓃eturn子句中的select語句的結(jié)果集的格式設(shè)置

      查看創(chuàng)建用戶自定義函數(shù)的方式有兩種 查看特定用戶自定義函數(shù)

      --查看用戶自定義函數(shù) USE pubs go EXEC sp_helptext my_function--調(diào)用存儲(chǔ)過程 GO

      查看所有用戶自定義函數(shù)

      --通過系統(tǒng)表查看用戶自定義函數(shù) use pubs go select name, type, crdate from sysobjects where type='FN'--go

      當(dāng)創(chuàng)建的用戶自定義函數(shù)需要修改時(shí),使用如下語句

      --修改函數(shù)cubicvolume函數(shù)

      ALTER FUNCTION CubicVolume--這句表示聲明修改用戶自定義函數(shù),其他語句不變

      (@CubeLength decimal(4,1), @CubeWidth decimal(4,1))--定義輸入?yún)?shù) RETURNS decimal(12,3)--定義返回值類型 AS BEGIN RETURN(@CubeLength * @CubeWidth)--返回結(jié)果 END 基本語法和創(chuàng)建的類型,只需要將create更改為alter即可

      刪除存儲(chǔ)過程,由于存儲(chǔ)過程為數(shù)據(jù)庫對象因此刪除使用drop drop function cubicvolume

      第三篇:NX10用戶自定義成型刀具和刀庫

      基于

      UGNX10.0用戶自定義成型刀具

      1:首先打開圖檔-進(jìn)入加工模塊-平面銑模塊(mill-planar)

      注:進(jìn)入任意一個(gè)加工模塊均可以

      2:切換至機(jī)床視圖-選擇創(chuàng)建刀具

      注:創(chuàng)建刀具類型只能選擇

      mill-pianar

      3:選擇刀具子類型中的-

      MILL_USER_DEFINED

      確定

      4:用戶定義刀具對話框如下圖、加工區(qū)域會(huì)出如下刀具

      通用的刀具可以通過“段數(shù)”

      對話框里面的參數(shù)創(chuàng)建

      5:例如:

      A:移除所有“鍛數(shù)”里面的所有數(shù)值

      B:輸入數(shù)值、每輸完一組選擇“添加新集”

      點(diǎn)一

      點(diǎn)二

      點(diǎn)三

      點(diǎn)四

      點(diǎn)五

      點(diǎn)六

      (LL)直線長度輸入“3”(LA)直線/圓弧起始角輸入“0”

      (AR)圓弧半徑輸入“0”(AS)圓弧掃掠輸入“0”

      (LL)直線長度輸入“5”(LA)直線/圓弧起始角輸入“90”

      (AR)圓弧半徑輸入“5”(AS)圓弧掃掠輸入“-90”

      (LL)直線長度輸入“3”(LA)直線/圓弧起始角輸入“0”

      (AR)圓弧半徑輸入“0”(AS)圓弧掃掠輸入“0”

      (LL)直線長度輸入“6”(LA)直線/圓弧起始角輸入“90”

      (AR)圓弧半徑輸入“0”(AS)圓弧掃掠輸入“0”

      (LL)直線長度輸入“6”(LA)直線/圓弧起始角輸入“180”

      (AR)圓弧半徑輸入“0”(AS)圓弧掃掠輸入“0”

      (LL)直線長度輸入“30”(LA)直線/圓弧起始角輸入“90”

      (AR)圓弧半徑輸入“0”(AS)圓弧掃掠輸入“0”

      6:指定刀路跟蹤點(diǎn)(回轉(zhuǎn)體刀具可以不用特別指定、在車加工需要指定刀路生

      成軌跡的參考點(diǎn))為圓心。

      7:設(shè)置刀具其他參數(shù)、描述、編號(hào)、等至此刀具創(chuàng)建完成、確認(rèn)即可

      8:將刀具創(chuàng)建到刀具庫.輸入庫號(hào)如:“fb20161202”選擇”刀具導(dǎo)入至刀具庫”確定

      9:根據(jù)需要?jiǎng)?chuàng)建“刀柄”“夾持器”等相關(guān)參數(shù)最后“確定”

      10:從刀具庫中調(diào)取刀具

      選擇“創(chuàng)建刀具”—“庫”

      選擇“從庫中調(diào)用刀具”—“庫類選擇”—“工具”—“確定”—可以輸入創(chuàng)建的庫號(hào)或直接確定

      搜索到庫號(hào)后選中可以“預(yù)覽”查看是否是你想要的刀具-確定調(diào)出你要的刀具

      11:從刀具庫中刪除創(chuàng)建錯(cuò)誤刀具

      退出

      UG、打開

      UG安裝路徑如:我安裝在D盤路徑為:D:\Program

      Files\Siemens\NX

      10.0\MACH\resource\library\tool\metric,文件夾內(nèi)容如

      下:

      記事本方式打開:tool_database文件、通過記事本查找功能找到錯(cuò)誤刀具庫名:

      如“fb20161202”刀具

      將選中部分全部刪除—保存—退出記事本

      UG打開重新進(jìn)入刀具庫-搜索“fb20161202”刀具—刀具已刪除

      第四篇:Oracle創(chuàng)建函數(shù)和過程

      ORACLE PL/SQL編程之六:把過程與函數(shù)說透(窮追猛打,把根兒都拔起!)

      繼上篇:ORACLE PL/SQL編程之八:把觸發(fā)器說透 得到了大家的強(qiáng)力支持,感謝。接下來再下猛藥,介紹下一篇,大家一定要支持與推薦呀~!我也才有動(dòng)力寫后面的。

      本篇主要內(nèi)容如下:

      6.1 引言 6.2 創(chuàng)建函數(shù) 6.3 存儲(chǔ)過程 6.3.1 創(chuàng)建過程 6.3.2 調(diào)用存儲(chǔ)過程 6.3.3 AUTHID

      6.3.4 PRAGMA AUTONOMOUS_TRANSACTION 6.3.5 開發(fā)存儲(chǔ)過程步驟 6.3.6 刪除過程和函數(shù) 6.3.7 過程與函數(shù)的比較

      6.1 引言

      過程與函數(shù)(另外還有包與觸發(fā)器)是命名的PL/SQL塊(也是用戶的方案對象),被編譯后存儲(chǔ)在數(shù)據(jù)庫中,以備執(zhí)行。因此,其它PL/SQL塊可以按名稱來使用他們。所以,可以將商業(yè)邏輯、企業(yè)規(guī)則寫成函數(shù)或過程保存到數(shù)據(jù)庫中,以便共享。過程和函數(shù)統(tǒng)稱為PL/SQL子程序,他們是被命名的PL/SQL塊,均存儲(chǔ)在數(shù)據(jù)庫中,并通過輸入、輸出參數(shù)或輸入/輸出參數(shù)與其調(diào)用者交換信息。過程和函數(shù)的唯一區(qū)別是函數(shù)總向調(diào)用者返回?cái)?shù)據(jù),而過程則不返回?cái)?shù)據(jù)。在本節(jié)中,主要介紹:

      1. 創(chuàng)建存儲(chǔ)過程和函數(shù)。2. 正確使用系統(tǒng)級(jí)的異常處理和用戶定義的異常處理。

      3. 建立和管理存儲(chǔ)過程和函數(shù)。

      6.2 創(chuàng)建函數(shù)

      1.創(chuàng)建函數(shù)

      語法如下:

      CREATE [OR REPLACE] FUNCTION function_name(arg1 [ { IN | OUT | IN OUT }] type1 [DEFAULT value1], [arg2 [ { IN | OUT | IN OUT }] type2 [DEFAULT value1]],......[argn [ { IN | OUT | IN OUT }] typen [DEFAULT valuen]])[ AUTHID DEFINER | CURRENT_USER ] RETURN return_type IS | AS

      <類型.變量的聲明部分> BEGIN

      執(zhí)行部分

      RETURN expression EXCEPTION 異常處理部分 END function_name;

      ? IN,OUT,IN OUT是形參的模式。若省略,則為IN模式。IN模式的形參只能將實(shí)參傳遞給形參,進(jìn)入函數(shù)內(nèi)部,但只能讀不能寫,函數(shù)返回時(shí)實(shí)參的值不變。OUT模式的形參會(huì)忽略調(diào)用時(shí)的實(shí)參值(或說該形參的初始值總是NULL),但在函數(shù)內(nèi)部可以被讀或?qū)?,函?shù)返回時(shí)形參的值會(huì)賦予給實(shí)參。IN OUT具有前兩種模式的特性,即調(diào)用時(shí),實(shí)參的值總是傳遞給形參,結(jié)束時(shí),形參的值傳遞給實(shí)參。調(diào)用時(shí),對于IN模式的實(shí)參可以是常量或變量,但對于OUT和IN OUT模式的實(shí)參必須是變量。

      ? 一般,只有在確認(rèn)function_name函數(shù)

      是新函數(shù)或是要更新的函數(shù)時(shí),才使用OR REPALCE關(guān)鍵字,否則容易刪除有用的函數(shù)。

      例1.獲取某部門的工資總和:

      --獲取某部門的工資總和 CREATE OR REPLACE FUNCTION get_salary(Dept_no NUMBER, Emp_count OUT NUMBER)RETURN NUMBER IS

      V_sum NUMBER;BEGIN

      SELECT SUM(SALARY), count(*)INTO V_sum, emp_count FROM EMPLOYEES WHERE DEPARTMENT_ID=dept_no;RETURN v_sum;EXCEPTION WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE('你需要的數(shù)據(jù)不存在!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END get_salary;

      2.函數(shù)的調(diào)用

      函數(shù)聲明時(shí)所定義的參數(shù)稱為形式參數(shù),應(yīng)用程序調(diào)用時(shí)為函數(shù)傳遞的參數(shù)稱為實(shí)際參數(shù)。應(yīng)用程序在調(diào)用函數(shù)時(shí),可以使用以下三種方法向函數(shù)傳遞參數(shù):

      第一種參數(shù)傳遞格式:位置表示法。

      即在調(diào)用時(shí)按形參的排列順序,依次寫出實(shí)參的名稱,而將形參與實(shí)參關(guān)聯(lián)起來進(jìn)行傳遞。用這種方法進(jìn)行調(diào)用,形參與實(shí)參的名稱是相互獨(dú)立,沒有關(guān)系,強(qiáng)調(diào)次序才是重要的。

      格式為:

      argument_value1[,argument_value2 …]

      例2:計(jì)算某部門的工資總和:

      DECLARE

      V_num NUMBER;V_sum NUMBER;BEGIN

      V_sum :=get_salary(10, v_num);DBMS_OUTPUT.PUT_LINE('部門號(hào)為:10的工資總和:'||v_sum||',人數(shù)為:'||v_num);END;

      第二種參數(shù)傳遞格式:名稱表示法。

      即在調(diào)用時(shí)按形參的名稱與實(shí)參的名稱,寫出實(shí)參對應(yīng)的形參,而將形參與實(shí)參關(guān)聯(lián)起來進(jìn)行傳遞。這種方法,形參與實(shí)參的名稱是相互獨(dú)立的,沒有關(guān)系,名稱的對應(yīng)關(guān)系才是最重要的,次序并不重要。

      格式為:

      argument => parameter [,…]

      其中:argument 為形式參數(shù),它必須與函數(shù)定

      義時(shí)所聲明的形式參數(shù)名稱相同parameter 為實(shí)際參數(shù)。

      在這種格式中,形勢參數(shù)與實(shí)際參數(shù)成對出現(xiàn),相互間關(guān)系唯一確定,所以參數(shù)的順序可以任意排列。例3:計(jì)算某部門的工資總和:

      DECLARE

      V_num NUMBER;V_sum NUMBER;BEGIN

      V_sum :=get_salary(emp_count => v_num, dept_no => 10);DBMS_OUTPUT.PUT_LINE('部門號(hào)為:10的工資總和:'||v_sum||',人數(shù)為:'||v_num);END;

      第三種參數(shù)傳遞格式:組合傳遞。

      即在調(diào)用一個(gè)函數(shù)時(shí),同時(shí)使用位置表示法和名稱表示法為函數(shù)傳遞參數(shù)。采用這種參數(shù)傳遞方法時(shí),使用位置表示法所傳遞的參數(shù)必須放在名稱表示法所傳遞的參數(shù)前面。也就是說,無論函數(shù)具有多少個(gè)參數(shù),只要其中有一個(gè)參數(shù)使用名稱表示法,其后所有的參數(shù)都必須使用名稱表示法。

      例4:

      CREATE OR REPLACE FUNCTION demo_fun(Name VARCHAR2,--注意VARCHAR2不能給精度,如:VARCHAR2(10),其它類似 Age INTEGER, Sex VARCHAR2)RETURN VARCHAR2 AS

      V_var VARCHAR2(32);BEGIN

      V_var := name||':'||TO_CHAR(age)||'歲.'||sex;RETURN v_var;END;

      DECLARE

      Var VARCHAR(32);BEGIN

      Var := demo_fun('user1', 30, sex => '男');DBMS_OUTPUT.PUT_LINE(var);

      Var := demo_fun('user2', age => 40, sex => '男');DBMS_OUTPUT.PUT_LINE(var);

      Var := demo_fun('user3', sex => '女', age => 20);DBMS_OUTPUT.PUT_LINE(var);END;

      無論采用哪一種參數(shù)傳遞方法,實(shí)際參數(shù)和形式參數(shù)之間的數(shù)據(jù)傳遞只有兩種方法:傳址法和傳值法。所謂傳址法是指在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)的地址指針傳遞給形式參數(shù),使形式參數(shù)和實(shí)際參數(shù)指向內(nèi)存中的同一區(qū)域,從而實(shí)現(xiàn)參數(shù)數(shù)據(jù)的傳遞。這種方法又稱作參照法,即形式參數(shù)參照實(shí)際參數(shù)數(shù)據(jù)。輸入?yún)?shù)均采用傳址法傳遞數(shù)據(jù)。傳值法是指將實(shí)際參數(shù)的數(shù)據(jù)拷貝到形式參數(shù),而不是傳遞實(shí)際參數(shù)的地址。默認(rèn)時(shí),輸出參數(shù)和輸入/輸出參數(shù)均采用傳值法。在函數(shù)調(diào)用時(shí),ORACLE將實(shí)際參數(shù)數(shù)據(jù)拷貝到輸入/輸出參數(shù),而當(dāng)函數(shù)正常運(yùn)行退出時(shí),又將輸出形式參數(shù)和輸入/輸出形式參數(shù)數(shù)據(jù)拷貝到實(shí)際參數(shù)變量中。

      3.參數(shù)默認(rèn)值

      在CREATE OR REPLACE FUNCTION 語句中聲明函數(shù)參數(shù)時(shí)可以使用DEFAULT關(guān)鍵字為輸入?yún)?shù)指定默認(rèn)值。

      例5:

      CREATE OR REPLACE FUNCTION demo_fun(Name VARCHAR2, Age INTEGER, Sex VARCHAR2 DEFAULT '男')RETURN VARCHAR2 AS

      V_var VARCHAR2(32);BEGIN

      V_var := name||':'||TO_CHAR(age)||'歲.'||sex;RETURN v_var;END;

      具有默認(rèn)值的函數(shù)創(chuàng)建后,在函數(shù)調(diào)用時(shí),如果沒有為具有默認(rèn)值的參數(shù)提供實(shí)際參數(shù)值,函數(shù)將使用該參數(shù)的默認(rèn)值。但當(dāng)調(diào)用者為默認(rèn)參數(shù)提供實(shí)際參數(shù)時(shí),函數(shù)將使用實(shí)際參數(shù)值。在創(chuàng)建函數(shù)時(shí),只能為輸入?yún)?shù)設(shè)置默認(rèn)值,而不能為輸入/輸出參數(shù)設(shè)置默認(rèn)值。

      DECLARE

      var VARCHAR(32);BEGIN

      Var := demo_fun('user1', 30);DBMS_OUTPUT.PUT_LINE(var);

      Var := demo_fun('user2', age => 40);DBMS_OUTPUT.PUT_LINE(var);

      Var := demo_fun('user3', sex => '女', age => 20);

      DBMS_OUTPUT.PUT_LINE(var);END;6.3 存儲(chǔ)過程

      6.3.1 創(chuàng)建過程

      建立存儲(chǔ)過程

      在 ORACLE SERVER上建立存儲(chǔ)過程,可以被多個(gè)應(yīng)用程序調(diào)用,可以向存儲(chǔ)過程傳遞參數(shù),也可以向存儲(chǔ)過程傳回參數(shù).創(chuàng)建過程語法:

      CREATE [OR REPLACE] PROCEDURE procedure_name([arg1 [ IN | OUT | IN OUT ]] type1 [DEFAULT value1], [arg2 [ IN | OUT | IN OUT ]] type2 [DEFAULT value1]],......[argn [ IN | OUT | IN OUT ]] typen [DEFAULT valuen])[ AUTHID DEFINER | CURRENT_USER ] { IS | AS } <聲明部分> BEGIN

      <執(zhí)行部分> EXCEPTION <可選的異常錯(cuò)誤處理程序> END procedure_name;

      說明:相關(guān)參數(shù)說明參見函數(shù)的語法說明。

      例6.用戶連接登記記錄;

      CREATE TABLE logtable(userid VARCHAR2(10), logdate date);

      CREATE OR REPLACE PROCEDURE logexecution IS BEGIN

      INSERT INTO logtable(userid, logdate)VALUES(USER, SYSDATE);END;

      例7.刪除指定員工記錄;

      CREATE OR REPLACE PROCEDURE DelEmp(v_empno IN employees.employee_id%TYPE)AS

      No_result EXCEPTION;BEGIN

      DELETE FROM employees WHERE employee_id = v_empno;IF SQL%NOTFOUND THEN RAISE no_result;END IF;DBMS_OUTPUT.PUT_LINE('編碼為'||v_empno||'的員工已被刪除!');EXCEPTION WHEN no_result THEN

      DBMS_OUTPUT.PUT_LINE('溫馨提示:你需要的數(shù)據(jù)不存在!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END DelEmp;

      例8.插入員工記錄:

      CREATE OR REPLACE PROCEDURE InsertEmp(v_empno in employees.employee_id%TYPE, v_firstname in employees.first_name%TYPE, v_lastname in employees.last_name%TYPE, v_deptno in employees.department_id%TYPE)AS

      empno_remaining EXCEPTION;PRAGMA EXCEPTION_INIT(empno_remaining,-1);/*-1 是違反唯一約束條件的錯(cuò)誤代碼 */ BEGIN

      INSERT INTO EMPLOYEES(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE,DEPARTMENT_ID)VALUES(v_empno, v_firstname,v_lastname, sysdate, v_deptno);DBMS_OUTPUT.PUT_LINE('溫馨提示:插入數(shù)據(jù)記錄成功!');EXCEPTION WHEN empno_remaining THEN

      DBMS_OUTPUT.PUT_LINE('溫馨提示:違反數(shù)據(jù)完整性約束!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END InsertEmp;

      例9.使用存儲(chǔ)過程向 departments表中插入數(shù)據(jù)。CREATE OR REPLACE PROCEDURE insert_dept(v_dept_id IN departments.department_id%TYPE, v_dept_name IN departments.department_name%TYPE, v_mgr_id IN departments.manager_id%TYPE, v_loc_id IN departments.location_id%TYPE)IS

      ept_null_error EXCEPTION;PRAGMA EXCEPTION_INIT(ept_null_error,-1400);ept_no_loc_id EXCEPTION;PRAGMA EXCEPTION_INIT(ept_no_loc_id,-2291);BEGIN

      INSERT INTO departments(department_id, department_name, manager_id, location_id)VALUES

      (v_dept_id, v_dept_name, v_mgr_id, v_loc_id);DBMS_OUTPUT.PUT_LINE('插入部門'||v_dept_id||'成功');EXCEPTION WHEN DUP_VAL_ON_INDEX THEN

      RAISE_APPLICATION_ERROR(-20000, '部門編碼不能重復(fù)');WHEN ept_null_error THEN

      RAISE_APPLICATION_ERROR(-20001, '部門編碼、部門名稱不能為空');WHEN ept_no_loc_id THEN

      RAISE_APPLICATION_ERROR(-20002, '沒有該地點(diǎn)');END insert_dept;

      /*調(diào)用實(shí)例一: DECLARE ept_20000 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20000,-20000);ept_20001 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20001,-20001);ept_20002 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20002,-20002);BEGIN insert_dept(300, '部門300', 100, 2400);insert_dept(310, NULL, 100, 2400);insert_dept(310, '部門310', 100, 900);EXCEPTION WHEN ept_20000 THEN DBMS_OUTPUT.PUT_LINE('ept_20000部門編碼不能重復(fù)');WHEN ept_20001 THEN DBMS_OUTPUT.PUT_LINE('ept_20001部門編碼、部門名稱不能為空');WHEN ept_20002 THEN DBMS_OUTPUT.PUT_LINE('ept_20002沒有該地點(diǎn)');WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('others出現(xiàn)了其他異常錯(cuò)誤');END;

      調(diào)用實(shí)例二: DECLARE ept_20000 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20000,-20000);ept_20001 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20001,-20001);ept_20002 EXCEPTION;PRAGMA EXCEPTION_INIT(ept_20002,-20002);BEGIN insert_dept(v_dept_name => '部門310', v_dept_id => 310, v_mgr_id => 100, v_loc_id => 2400);insert_dept(320, '部門320', v_mgr_id => 100, v_loc_id => 900);EXCEPTION WHEN ept_20000 THEN DBMS_OUTPUT.PUT_LINE('ept_20000部門編碼不能重復(fù)');WHEN ept_20001 THEN DBMS_OUTPUT.PUT_LINE('ept_20001部門編碼、部門名稱不能為空');WHEN ept_20002 THEN DBMS_OUTPUT.PUT_LINE('ept_20002沒有該地點(diǎn)');WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('others出現(xiàn)了其他異常錯(cuò)誤');END;*/

      6.3.2 調(diào)用存儲(chǔ)過程

      存儲(chǔ)過程建立完成后,只要通過授權(quán),用戶就可以在SQLPLUS、ORACLE開發(fā)工具或第三方開發(fā)工具中來調(diào)用運(yùn)行。對于參數(shù)的傳遞也有三種:按位置傳遞、按名稱傳遞和組合傳遞,傳遞方法與函數(shù)的一樣。ORACLE 使用EXECUTE 語句來實(shí)現(xiàn)對存儲(chǔ)過程的調(diào)用:

      EXEC[UTE] procedure_name(parameter1, parameter2…);

      例10: EXECUTE logexecution;

      例11:查詢指定員工記錄;

      CREATE OR REPLACE PROCEDURE QueryEmp(v_empno IN employees.employee_id%TYPE, v_ename OUT employees.first_name%TYPE, v_sal OUT employees.salary%TYPE)AS BEGIN

      SELECT last_name || last_name, salary INTO v_ename, v_sal FROM employees WHERE employee_id = v_empno;DBMS_OUTPUT.PUT_LINE('溫馨提示:編碼為'||v_empno||'的員工已經(jīng)查到!');EXCEPTION WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE('溫馨提示:你需要的數(shù)據(jù)不存在!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END QueryEmp;--調(diào)用

      DECLARE

      v1 employees.first_name%TYPE;v2 employees.salary%TYPE;BEGIN

      QueryEmp(100, v1, v2);DBMS_OUTPUT.PUT_LINE('姓名:'||v1);DBMS_OUTPUT.PUT_LINE('工資:'||v2);QueryEmp(103, v1, v2);DBMS_OUTPUT.PUT_LINE('姓名:'||v1);DBMS_OUTPUT.PUT_LINE('工資:'||v2);QueryEmp(104, v1, v2);DBMS_OUTPUT.PUT_LINE('姓名:'||v1);DBMS_OUTPUT.PUT_LINE('工資:'||v2);END;

      例12.計(jì)算指定部門的工資總和,并統(tǒng)計(jì)其中的職工數(shù)量。

      CREATE OR REPLACE PROCEDURE proc_demo(dept_no NUMBER DEFAULT 10, sal_sum OUT NUMBER, emp_count OUT NUMBER)IS BEGIN

      SELECT SUM(salary), COUNT(*)INTO sal_sum, emp_count FROM employees WHERE department_id = dept_no;EXCEPTION WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE('溫馨提示:你需要的數(shù)據(jù)不存在!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END proc_demo;

      DECLARE V_num NUMBER;V_sum NUMBER(8, 2);BEGIN

      Proc_demo(30, v_sum, v_num);DBMS_OUTPUT.PUT_LINE('溫馨提示:30號(hào)部門工資總和:'||v_sum||',人數(shù):'||v_num);Proc_demo(sal_sum => v_sum, emp_count => v_num);DBMS_OUTPUT.PUT_LINE('溫馨提示:10號(hào)部門工資總和:'||v_sum||',人數(shù):'||v_num);END;

      在PL/SQL 程序中還可以在塊內(nèi)建立本地函數(shù)和過程,這些函數(shù)和過程不存儲(chǔ)在數(shù)據(jù)庫中,但可以在創(chuàng)建它們的PL/SQL 程序中被重復(fù)調(diào)用。本地函數(shù)和過程在PL/SQL 塊的聲明部分定義,它們的語法格式與存儲(chǔ)函數(shù)和過程相同,但不能使用CREATE OR REPLACE 關(guān)鍵字。

      例13:建立本地過程,用于計(jì)算指定部門的工資總和,并統(tǒng)計(jì)其中的職工數(shù)量;

      DECLARE V_num NUMBER;V_sum NUMBER(8, 2);PROCEDURE proc_demo(Dept_no NUMBER DEFAULT 10, Sal_sum OUT NUMBER, Emp_count OUT NUMBER)IS BEGIN

      SELECT SUM(salary), COUNT(*)INTO sal_sum, emp_count FROM employees WHERE department_id=dept_no;EXCEPTION WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE('你需要的數(shù)據(jù)不存在!');WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END proc_demo;--調(diào)用方法: BEGIN

      Proc_demo(30, v_sum, v_num);DBMS_OUTPUT.PUT_LINE('30號(hào)部門工資總和:'||v_sum||',人數(shù):'||v_num);Proc_demo(sal_sum => v_sum, emp_count => v_num);DBMS_OUTPUT.PUT_LINE('10號(hào)部門工資總和:'||v_sum||',人數(shù):'||v_num);END;

      6.3.3 AUTHID 過程中的AUTHID 指令可以告訴ORACLE,這個(gè)過程使用誰的權(quán)限運(yùn)行.默任情況下,存儲(chǔ)過程會(huì)作為調(diào)用者的過程運(yùn)行,但是具有設(shè)計(jì)者的特權(quán).這稱為設(shè)計(jì)者權(quán)利運(yùn)行.

      例14:建立過程,使用

      Connect HR/qaz DROP TABLE logtable;CREATE table logtable(userid VARCHAR2(10), logdate date);

      CREATE OR REPLACE PROCEDURE logexecution AUTHID DEFINER IS BEGIN

      INSERT INTO logtable(userid, logdate)VALUES(USER, SYSDATE);END;

      GRANT EXECUTE ON logexecution TO PUBLIC;

      CONNECT / AS SYSDBA GRANT CONNECT TO testuser1 IDENTIFIED BY userpwd1;

      CONNECT testuser1/userpwd1 INSERT INTO HR.LOGTABLE VALUES(USER, SYSDATE);EXECUTE HR.logexecution

      AUTOID DEFINER; CONNECT HR/qaz SELECT * FROM HR.logtable;

      例15:建立過程,使用

      CONNECT HR/qaz

      CREATE OR REPLACE PROCEDURE logexecution AUTHID CURRENT_USER IS BEGIN

      INSERT INTO logtable(userid, logdate)VALUES(USER, SYSDATE);END;

      GRANT EXECUTE ON logexecution TO PUBLIC;

      CONNECT testuser1/userpwd1 INSERT INTO HR.LOGTABLE VALUES(USER, SYSDATE);EXECUTE HR.logexecution

      AUTOID CURRENT_USER;

      6.3.4 PRAGMA AUTONOMOUS_TRANSACTION

      ORACLE8i 可以支持事務(wù)處理中的事務(wù)處理的概念.這種子事務(wù)處理可以完成它自己的工作,獨(dú)立于父事務(wù)處理進(jìn)行提交或者回滾.通過使用這種方法,開發(fā)者就能夠這樣的過程,無論父事務(wù)處理是提交還是回滾,它都可以成功執(zhí)行.

      例16:建立過程,使用自動(dòng)事務(wù)處理進(jìn)行日志記錄;

      DROP TABLE logtable;

      CREATE TABLE logtable(Username varchar2(20), Dassate_time date, Mege varchar2(60));

      CREATE TABLE temp_table(N number);

      CREATE OR REPLACE PROCEDURE log_message(p_message varchar2)AS PRAGMA AUTONOMOUS_TRANSACTION;BEGIN

      INSERT INTO logtable VALUES(user, sysdate, p_message);COMMIT;END log_message;BEGIN

      Log_message(‘About to insert into temp_table‘);

      INSERT INTO temp_table VALUES(1);Log_message(‘Rollback to insert into temp_table‘);

      ROLLBACK;END;

      SELECT * FROM logtable;SELECT * FROM temp_table;

      例17:建立過程,沒有使用自動(dòng)事務(wù)處理進(jìn)行日志記錄;

      CREATE OR REPLACE PROCEDURE log_message(p_message varchar2)AS BEGIN

      INSERT INTO logtable VALUES(user, sysdate, p_message);COMMIT;END log_message;BEGIN

      Log_message('About to insert into temp_table');INSERT INTO temp_table VALUES(1);Log_message('Rollback to insert into temp_table');ROLLBACK;END;

      SELECT * FROM logtable;SELECT * FROM temp_table;

      6.3.5 開發(fā)存儲(chǔ)過程步驟

      開發(fā)存儲(chǔ)過程、函數(shù)、包及觸發(fā)器的步驟如下:

      6.3.5.1 使用文字編輯處理軟件編輯存儲(chǔ)過程源碼 使用文字編輯處理軟件編輯存儲(chǔ)過程源碼,要用類似WORD 文字處理軟件進(jìn)行編輯時(shí),要將源碼存為文本格式。

      6.3.5.2 在SQLPLUS或用調(diào)試工具將存儲(chǔ)過程程序進(jìn)行解釋

      在SQLPLUS或用調(diào)試工具將存儲(chǔ)過程程序進(jìn)行解釋;

      在SQL>下調(diào)試,可用START 或GET 等ORACLE命令來啟動(dòng)解釋。如: SQL>START c:stat1.sql

      如果使用調(diào)式工具,可直接編輯和點(diǎn)擊相應(yīng)的按鈕即可生成存儲(chǔ)過程。

      6.3.5.3 調(diào)試源碼直到正確

      我們不能保證所寫的存儲(chǔ)過程達(dá)到一次就正確。所以這里的調(diào)式是每個(gè)程序員必須進(jìn)行的工作之一。在SQLPLUS下來調(diào)式主要用的方法是:

      ? 使用 SHOW ERROR命令來提示源碼的錯(cuò)誤位置;

      ? 使用 user_errors 數(shù)據(jù)字典來查看各存儲(chǔ)過程的錯(cuò)

      誤位置。

      6.3.5.4 授權(quán)執(zhí)行權(quán)給相關(guān)的用戶或角色

      如果調(diào)式正確的存儲(chǔ)過程沒有進(jìn)行授權(quán),那就只有建立者本人才可以運(yùn)行。所以作為應(yīng)用系統(tǒng)的一部分的存儲(chǔ)過程也必須進(jìn)行授權(quán)才能達(dá)到要求。在SQL*PLUS下可以用GRANT命令來進(jìn)行存儲(chǔ)過程的運(yùn)行授權(quán)。

      GRANT語法:

      GRANT system_privilege | role TO user | role | PUBLIC [WITH ADMIN OPTION]

      GRANT object_privilege | ALL ON schema.object TO user | role | PUBLIC [WITH GRANT OPTION]

      --例子:

      CREATE OR REPLACE PUBLIC SYNONYM dbms_job FOR dbms_job

      GRANT EXECUTE ON dbms_job TO PUBLIC WITH GRANT OPTION

      6.3.5.5 與過程相關(guān)數(shù)據(jù)字典

      USER_SOURCE, ALL_SOURCE, DBA_SOURCE, USER_ERRORS, ALL_PROCEDURES,USER_OBJECTS,ALL_OBJECTS,DBA_OBJECTS

      相關(guān)的權(quán)限:

      CREATE ANY PROCEDURE DROP ANY PROCEDURE

      在SQL*PLUS 中,可以用DESCRIBE 命令查看過程的名字及其參數(shù)表。

      DESC[RIBE] Procedure_name;

      6.3.6 刪除過程和函數(shù)

      1.刪除過程

      可以使用DROP PROCEDURE命令對不需要的過程進(jìn)行刪除,語法如下:

      DROP PROCEDURE [user.]Procudure_name;

      2.刪除函數(shù)

      可以使用DROP FUNCTION 命令對不需要的函數(shù)進(jìn)行刪除,語法如下:

      DROP FUNCTION [user.]Function_name;

      --刪除上面實(shí)例創(chuàng)建的存儲(chǔ)過程與函數(shù) DROP PROCEDURE logexecution;DROP PROCEDURE delemp;DROP PROCEDURE insertemp;DROP PROCEDURE fireemp;DROP PROCEDURE queryemp;DROP PROCEDURE proc_demo;DROP PROCEDURE log_message;DROP FUNCTION demo_fun;DROP FUNCTION get_salary;

      6.3.7 過程與函數(shù)的比較

      使用過程與函數(shù)具有如下優(yōu)點(diǎn):

      1、共同使用的代碼可以只需要被編寫和測試一次,而被需要該代碼的任何應(yīng)用程序(如:.NET、C++、JAVA、VB程序,也可以是DLL庫)調(diào)用。

      2、這種集中編寫、集中維護(hù)更新、大家共享(或重用)的方法,簡化了應(yīng)用程序的開發(fā)和維護(hù),提高了效率與性能。

      3、這種模塊化的方法,使得可以將一個(gè)復(fù)雜的問題、大的程序逐步簡化成幾個(gè)簡單的、小的程序部分,進(jìn)行分別編寫、調(diào)試。因此使程序的結(jié)構(gòu)清晰、簡單,也容易實(shí)現(xiàn)。

      4、可以在各個(gè)開發(fā)者之間提供處理數(shù)據(jù)、控制流程、提示信息等方面的一致性。

      5、節(jié)省內(nèi)存空間。它們以一種壓縮的形式被存儲(chǔ)在外存中,當(dāng)被調(diào)用時(shí)才被放入內(nèi)存進(jìn)行處理。并且,如果多個(gè)用戶要執(zhí)行相同的過程或函數(shù)時(shí),就只需要在內(nèi)存中加載一個(gè)該過程或函數(shù)。

      6、提高數(shù)據(jù)的安全性與完整性。通過把一些對數(shù)據(jù)的操作放到過程或函數(shù)中,就可以通過是否授予用戶有執(zhí)行該過程或的權(quán)限,來限制某些用戶對數(shù)據(jù)進(jìn)行這些操作。

      過程與函數(shù)的相同功能有:

      1、都使用IN模式的參數(shù)傳入數(shù)據(jù)、OUT模式的參數(shù)返

      回?cái)?shù)據(jù)。

      2、輸入?yún)?shù)都可以接受默認(rèn)值,都可以傳值或傳引導(dǎo)。

      3、調(diào)用時(shí)的實(shí)際參數(shù)都可以使用位置表示法、名稱表示

      法或組合方法。

      4、都有聲明部分、執(zhí)行部分和異常處理部分。

      5、其管理過程都有創(chuàng)建、編譯、授權(quán)、刪除、顯示依賴

      關(guān)系等。

      使用過程與函數(shù)的原則:

      1、如果需要返回多個(gè)值和不返回值,就使用過程;如果只需要返回一個(gè)值,就使用函數(shù)。

      2、過程一般用于執(zhí)行一個(gè)指定的動(dòng)作,函數(shù)一般用于計(jì)算和返回一個(gè)值。

      3、可以SQL語句內(nèi)部(如表達(dá)式)調(diào)用函數(shù)來完成復(fù)雜的計(jì)算問題,但不能調(diào)用過程。所以這是函數(shù)的特色。

      第五篇:6.用戶自定義控件中 Control Type Def 和 Strict Type Def的區(qū)別

      為了解釋清楚,先定義一下要用到的概念。我們把以.ctl 文件名定義的控件叫做用戶自定義控件,把通過拖拽或打開這個(gè).ctl 文件在 VI 上生成的控件叫做實(shí)例。

      LabVIEW 的用戶自定義控件包括了三種定義形式:打開一個(gè).ctl 文件,在它上方的“control”下拉條中有三個(gè)選擇,分別是無關(guān)聯(lián)控件(Control)、類型定義(Type Def.)或者嚴(yán)格類型定義(Strict Type Def.)。

      無關(guān)聯(lián)控件是指這個(gè)控件與它的實(shí)例之間沒有任何關(guān)聯(lián)。例如,你制作了一個(gè)漂亮的按鈕控件保存在.ctl 文件中。需要用到它時(shí),通過拖拽或打開這個(gè).ctl 文件就可以在 VI 中生成這個(gè)用戶自定義控件的一個(gè)實(shí)例。這個(gè)實(shí)例一旦生成,就和原用戶自定義控件無任何關(guān)聯(lián)了。無論是你修改這個(gè)實(shí)例,還是修改原用戶自定義控件,都不會(huì)對另一方產(chǎn)生任何影響。

      類型定義控件是指實(shí)例控件與用戶自定義控件的空間類型是相關(guān)聯(lián)的。比如,你的用戶自定義控件是一個(gè)數(shù)值型控件,那么它的所有實(shí)例控件也都是數(shù)值型的。如果我們在.ctl 文件中把用戶自定義控件的類型改為字符串,那么它已有的所有實(shí)例都將自動(dòng)變成字符串類型。

      有時(shí)候,只是類型相關(guān)聯(lián)還不夠。比如對于 Ring(Enum,Combo Box)這類的控件來說,如果在用戶自定義控件中添加了一項(xiàng)內(nèi)容(item),一般總是希望它所有的實(shí)例也同時(shí)添加這一選項(xiàng)。如果使用類型定義控件,因?yàn)榭丶愋蜎]變,還是 Ring,實(shí)例們是不會(huì)自動(dòng)跟隨更新的。這時(shí)就需要使用嚴(yán)格類型定義控件。選擇嚴(yán)格類型定義后,不但實(shí)例與用戶自定義控件的類型是相關(guān)聯(lián)的,其他一些控件屬性,比如顏色等等,也是相關(guān)聯(lián)的。

      使用嚴(yán)格類型定義時(shí)有一點(diǎn)容易被誤解:嚴(yán)格類型定義只是與實(shí)例控件相關(guān)聯(lián),由它生成的實(shí)例常量的屬性是不與之關(guān)聯(lián)的。實(shí)例常量是指通過拖拽或生成常量等方法,在程序框圖上生成的一個(gè)與.ctl 文件相關(guān)聯(lián)的常量。比如在 Ring 型用戶自定義控件中添加了一項(xiàng)內(nèi)容,相關(guān)的實(shí)例常量是不會(huì)發(fā)生任何改變的。很多人按常理想,認(rèn)為常量也應(yīng)當(dāng)自動(dòng)更新,但事實(shí)上不行。這也是我不采用它做常量定義的原因之

      一。(參見:在 LabVIEW 中使用常量定義)

      下載第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文word格式文檔
      下載第5章 視圖、存儲(chǔ)過程和用戶自定義函數(shù)復(fù)習(xí)題范文.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦