SQL的儲存過程

2021-09-19 09:37:10 字數 4419 閱讀 1849

儲存過程可以改變sql語句的執行效能,提高執行效率;還可以作為一種安全機制,使使用者通過它來訪問未被授權的表和檢視。儲存過程包括的建立、執行、檢視、修改和刪除

概念:儲存過程是一組預先編譯好的transact-sql語句。

儲存過程為標準sql增加了幾種功能,這些功能正是sql語句所缺少的,增加的功能詳細說明

如下:1.條件執行

在儲存過程中錄入一套transact-sql語句後,可以使用transact-sql的if…then…else結構根據儲存過程中其他語句的執行返回的結果來決定執行過程中的某條語句。

2.迴圈控制結構

tracsact-sql語句中的while語句和for語句允許重複執行一系列語句,知道滿足某種終止條件

3.命名變數

可以在儲存過程中使用命名的記憶體位置(即變數)來儲存通過引數傳向過程的值,以及由過程內的查詢返回的值或是由某些其他方法計算的值。

4.命名過程

在儲存過程中放入一條或多條transact-sql語句並新增了條件執行和迴圈控制結構之後,可以為儲存過程起乙個名稱通過正式的輸入和輸出引數把資料傳入過程或從過程傳出來。

並且,一旦定義和編譯之後,可以通過名稱在觸發器中呼叫,在互動環境中通過sql server資料庫中的sql query analyzer呼叫,也可以在應用程式中呼叫,甚至還可以作為標準sql語句的子句來使用。

5.語句塊

通過呼叫儲存過程可以讓dbms執行一系列sql語句,就像執行單條語句一樣

一、建立儲存過程(sql server的儲存過程)

利用create procedure 語句來建立儲存過程。

語法如下:

create proc [edure] procedure_name

[ [ = default] [output]]

as sql_statement [ ...n]

引數                        引數說明

procedure_name                新儲存過程的名稱。過程名必須符合識別符號規則,且對於資料庫及其所有者必須唯一

@parameter                    過程中的引數

data_type                    引數的資料型別

default                        引數的預設值。預設值必須是常量或null。如果定義了預設值,不必指定該引數的值即可執行過程。如果使用like關鍵字,預設值可以包含萬用字元%、_、和[^]

output                        表名引數的返回引數,該選項的值可以返回給exec[ute].使用output引數可將資訊返回給呼叫過程。text、ntext和image引數可用作output關鍵字。使用output關鍵字的輸出引數可以是游標佔位符

as                            指定過程要執行的操作

sql_statement                過程中要包含的任意數目和型別的transact-sql語句

執行過程:exec procedure_name

二、檢視儲存過程

1.sp_helptext,檢視儲存過程的文字資訊

sp_helptext [@objname = ] 'name'

2.sp_depends,檢視儲存過程的相關資訊

3.sp_help,檢視儲存過程的一般資訊

三、修改儲存過程

alter procedure 語句的語法如下:

alter proc [edure] procedure_name

[ [ = default] [output]]

as sql_statement [ ...n]

四、刪除儲存過程

drop 語句的語法如下:

drop procedure procedure_name

一、建立儲存過程(oracle的儲存過程)

語法如下:

create [or replace] procedure《過程名》

(《引數1>,[方式1]《資料型別1>,

《引數1>,[方式1]《資料型別1>

…)is|as

pl/sql過程體;

儲存過程的引數有3中型別,分別如下:

1.in引數型別

這是乙個輸入型別的引數,表示這個引數輸入給儲存過程,供儲存過程使用。

2.out引數型別

這是個輸出型別的引數,表示這個引數在儲存過程中被賦值,可以傳給過程體以外的部分或環境。

例如:使用in將in_***引數值輸入給儲存過程,

使用out將out_num引數值輸出給儲存過程以外的部分或者環境,

**如下:

create or peplace procedure insert_dept

(num_deptno in number, --定義in模式的變數num_deptno,用來儲存部門編號

var_ename in varchar2, --定義in模式的變數var_ename,用來儲存部門名稱

var_loc in varchar2,

var_dname out dept.dname%type, --定義out模式變數,可以儲存部門名稱並輸出

)    is

3.in out 引數型別

這種型別的引數其實是綜合了上述兩種引數型別,既向過程體傳值,又在過程體中被賦值傳向過程體外

例如,使用in out 將in_out_num引數值向過程體傳送值,在過程體中也被賦值傳向過程體外。

**如下:

create or peplace procedure double

(in_out_num in out number)    as --in out型別引數

begin

in_out_num := in_out_num * 2;

end double;

二、

例:建立乙個儲存過程pro_square,在其中定義乙個in out 引數,該儲存過程用來計算這個引數的平方或平方根。

1.輸入:

create or replace procedure pro_square

(num in out number, --計算它的平方或平方根,這是乙個in out 引數

flag in boolean --計算平方或平方根的標識,這是乙個 in 引數

) is

begin

if flag then

num := power(num,i); --計算平方

else

num :=sqrt(num); --計算平方根

end if ;

end ;

2.執行儲存過程:

set serveroutput on

declare

var_number number; --儲存要進行運算的值和運算後的結果

var_temp number; --儲存要進行運算的值

boo_flag boolean; --平方或平方根的邏輯標記

begin

var_temp := 3; --變數賦值

var_number :=var_temp;

boo_flag :=false; --false表示計算平方根;true表示計算平方

pro_square(var_temp,boo_flag); --呼叫儲存過程pro_square

if boo_flag then

dbms_output.put_line(var_temp || '的平方是: ' || var_number) ;--輸出計算結果

else

dbms_output.put_line(var_temp || '的平方根是: ' || var_number) ;

end if;

end;

3.輸出結果:

3的平方根是: 1.732050...

三、刪除儲存過程

drop procedure count_num;

重新建立儲存過程pro_square,**如下:

create or replace procedure pro_square()

一、建立儲存過程(mysql的儲存過程)

create procedure procedure_name(in parameter intrger)

begin

declare 

variable varchar(20);

ifparameter =1

then 

set variable ='sql';

else

set variable ='mysql';

end if;

insert into tb_table(tb_name) values (variable)

end ;

二、執行

use shop;

call proc(@a);

SQL儲存過程

什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...

sql儲存過程

概念 sql server提供了一種方法,它可以將一些固定的操作集中起來由sql server資料庫伺服器來完成,以實現某個任務,這種方法就是儲存過程。儲存過程是sql語句和可選控制流語句的預編譯集合,儲存過程在資料庫中可由應用程式通過乙個呼叫執行,而且允許使用者申明變數 有條件的執行以及其它強大的...

SQL儲存過程

儲存過程 1.返回值 create proc example4 as begin declare 返回值 int select 返回值 sum 庫存量 from 產品 return 返回值 endgo 接受這個返回值必須要用變數來接收,如 declare 接收值 int exec 接收值 examp...