PL/SQL存储过程使用手册

上一篇 / 下一篇  2007-12-10 15:43:18 / 个人分类:SQL

存储过程使用手册软件测试网(k7A0L]&A0KI R
一、存储过程概述

1. 存储过程定义

存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值,不同数据库存储过程的写法是不一样的。(简单点说存储过程就是由一组SQL语句和可选控制流语句的预编译集合。)  

d}\K B'hv&i!cq0

2. 存储过程的优点

使用存储过程有以下的优点:     软件测试网%UM J6hBs

1存储过程大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 软件测试网;?u\vR(L0\S'o~

2、可保证数据的安全性和完整性。  

zW&il*SF0

    1)通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。     软件测试网CR3q|!z*q

    2)通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。    软件测试网\ A)S6Lg4I \T a

3、在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。软件测试网&f4h9{7kc'N

4、可以降低网络的通信量。     软件测试网)_aN.pX1@M2L~

5、使体现企业规则的运算程序放入数据库服务器中,以便:   软件测试网9A X3B0g0`w4V

    1)集中控制。   软件测试网2W;M k+P k)bq,T

    2)当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。

?+MQA1C!d0

二、ORACLE的存储过程使用方法

1. ORACLE创建存储过程的基本语法:  

1)基本格式:软件测试网X]My3|

create     [or   replace]   procedure    存储过程名     

+k3Q5H Ub5P(@f0

参数1    [in|out|in  out]  数据类型     软件测试网!o?`H-i1rZ

[,参数2   [in|out|in  out]  数据类型]......  

$O,vJ1v"? V m9feM0

{is|as}    pl/sql语句 软件测试网t-l D Wld~-Wca

begin

k&AT-i C5w2`T0

end 存储过程名

%q D8z2tLe+]@L t0

2SELECT INTO STATEMENT软件测试网4]-|]1k4cuf4|-D2k[U

  select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)

S*?o r"M1F?0

  例子:

7syX%d hcWj!X E0

  BEGIN

#{wH,|3Nj#I0

  SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;软件测试网eY0W~0Dd

  EXCEPTION软件测试网WB,Z_PM@ZZ

  WHEN NO_DATA_FOUND THEN软件测试网+b8}b(V8x_(H ~0z5W+cp

      xxxx;软件测试网-a7~b`hr/p&yC

  END;

VKjaP$b"c+G0

  ...

GJ)E+P;o@g;j)mVJ0

3IF 判断

1f;fBa/ej0

  IF V_TEST=1 THEN

-]p7h3N1o!odN0

    BEGIN 软件测试网'pq9{RM/r9v}

       XXXX

^/?FlL;Z^a0

    END;软件测试网(~W/^v+@Z$Lu

  END IF;软件测试网&K7ke3wt

4while 循环

tq U,j8_^2_E0

  WHILE V_TEST=1 LOOP

m^U&j KN#m4}0

  BEGIN

(k:MvpSI^F9j0

 XXXX

mWU+L7JVB]0

  END;软件测试网Vp uG Z,T3_LvL

  END LOOP;

)~u['SQ?A0

5)变量赋值

;iWgw;U/P0

  V_TEST := 123;软件测试网9N)F6P,ffCl0I

6)用for in 使用cursor软件测试网)C~u8Ak`"j:q+Ki LN

  ...软件测试网8S o8HA5XF6i_

  IS

V mE[+?"y0

  CURSOR cur IS SELECT * FROM xxx;

4mL0P a,zG8GC7V0

  BEGIN

'fM.k2?{0

 FOR cur_result in cur LOOP软件测试网bgB:[-}Z

  BEGIN软件测试网zza$y$^q5U!B(e

   V_SUM :=cur_result.列名1+cur_result.列名2软件测试网 Lu,C$Xty dE o

  END;

*D?5T;oC0

 END LOOP;

T0M7tQ5d7k0

  END;

2c?9gA@*B~i7q5e0

 

p/g7_`$V*hx+NV(j%Uw0

7)带参数的cursor

+VJx#d6nX}&k4S,k0

  CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;

V` O:Ajo e$A @k&U0

  OPEN C_USER(变量值);

I3s6fZ.c;x$x.D6@%L0

  LOOP

#N^?G~\P0

 FETCH C_USER INTO V_NAME;软件测试网:`@6u} Iwq

 EXIT FETCH C_USER%NOTFOUND;

@)?2v7|l#CF@0

    do something软件测试网-KB+G;kuq ?#r

  END LOOP;

Wo+@@ fT hk0

  CLOSE C_USER;软件测试网3J1O*q[$P{/flij(V)q

2. 建立存储过程

1. 通过命令行,直接在sql窗口创建一个存储过程。

Y`3q{g^lV0

1)打开一个sql窗口,如图1

$l4Y/X`p.TL0

7sYw'`hg TCm2P0

1

5I%L#MP6CG&a,S#\ z8`0

2)在sql窗口输入命令行并按f8运行,一个存储过程即可创建成功,如图2、图3软件测试网,Qe,|M9F!h4d8l+Q

(建立一个表tt1abc三个属性,创建一个存储过程,将a列字符串的大写字符串和小写字符串分别插入到b列、c列)

a)wUVC(D5\0

9T m*}%|N0

2软件测试网:dfi1V6C3A-[z4]'n

软件测试网gD)On `,?0k#q

3

C0be#{y zc5m*Ie0

2. sql窗口创建一个表后,通过左侧菜单创建。软件测试网g r4\8F9dR%HX

1)在sql窗口创建一个表。如图4

CV&u Vw)bTG m0

(创建一个表tt2

$H Cx\L5~]0

软件测试网(g*^r5_p Y

4

m+e&v!^.FA.v6cu SZ s0

2)右击左侧菜单procedures,选择new,如图5

;JQ$z acB9H0

#sw{hGa&pXH0

5软件测试网)j"e5y w5@TV#d

弹出如下窗口:软件测试网-Z?*U UZ&?G| l Ex u

软件测试网EK.xHtY(Z'oi

6软件测试网M"zK_d#WYL

填写要创建的存储过程名和参数(Name:p_test2,Parameters: i in varchar2),点击ok软件测试网FAHD'C3fXz }-Zj

3)在弹出的窗口内填写要进行编译的sql语句,并F8,一个存储过程即创建成功。如图7

r4@9{'Y4c&eZ\"X0

(创建了一个功能跟p_test1相同的存储过程p_test2软件测试网"^`U7r*j}

软件测试网o'G9vUK8I

7软件测试网"\db1R DV6}Hh

3. 运行存储过程

1)选择存储过程名点击右键,选择test。如图8

x XO^ygD Ys A^0

 软件测试网pRO,z4[

Y/{ O;p,nA\&P0

8

|+^ yU#} y0

2)输入需要输入的数值,按F8快捷键即可运行已有存储过程。如图9软件测试网KS K,w_$^

软件测试网a L~e/[6x0O!~

9

`M;y?W&AR0

3)可通过查询表状态查看存储过程运行结果。如图10

:rWhe4sb0

+P&U ^"a [6ab0

10

M:}!P;wX(rK5["l|0

4.  调用存储过程

1. CALL命令

Q1NP&Yl3iH;v0

CALL  procedure_name[(parameter,...n)]软件测试网 A?1e7~ o0Dl+so

调用p_test1i=sTEst’如图11软件测试网*\d h.U4[y]

:T ]:I*BJCyT0

11软件测试网 V5n+A@'t)p&duIXiK3K

运行结果查询如图12软件测试网#CQ&Y_f

ry}T"I4R!|0

12软件测试网` Q0Pv[%o9d

2. 编写PL/SQL语句执行软件测试网[Q7XcQ%UBu1h T

DECLARE软件测试网 [\kD&n/l~

...软件测试网 B]6N&Q%V

BEGIN

-{([+X8Sn0

procedure_name[(parameter,...n)]软件测试网X,gxIR7s2]5K

END;

oo!@2v_0

软件测试网3V'SO!I0f:g

BEGIN

l!R;g^8[8D"B1QcDN0

procedure_name[(parameter,...n)]

9W4_zn^7n0

END;

:E;|FaH9kRx0

 

3s&k` w:I}bj0

调用p_test1i=Test’如图13 软件测试网}@/bT F:gg"J {/g

R$P-IpCK0

13软件测试网5{![t#sQ$Ry

 

8z*Rd?;Vj`0

运行结果查询如图14

~Srw`0ds0

软件测试网7?$\S q N2U*x

14

A+p q&qfc cr1x0

调用p_test1i=another Test’如图15

9j x sw\\ h&t5Q0

软件测试网D%w&V4}G5d9n~ I

15软件测试网-I2\@:o W e x$u

运行结果查询如图16

%s/u:Se8^0

!|`x'e-K/Mf0

16软件测试网3B+`2Y*nq#fsj jo

5. 修改存储过程

修改存储过程和修改视图一样,虽然也有ALTER PROCEDURE语句,但是它是用于重新编译或验证现有过程的.软件测试网J$bIG/AtJ6jN|V

如果要修改过程定义,仍然要使用 CREAE REPLACE 命令,语法格式一样.软件测试网!A }&bs%kT@O

6. 删除存储过程

1. 通过命令行删除存储过程。

+t&RL ];H$Cyz _ V0

DROP PROCEDURE[schema.]procedure_name;

NMG1l%Z`TioB0

删除存储过程p_test2,如图17

\ka mOR{gTPS&U0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2011-06-14  
   1234
567891011
12131415161718
19202122232425
2627282930  

我的存档

数据统计

  • 访问量: 953
  • 日志数: 5
  • 建立时间: 2007-12-05
  • 更新时间: 2007-12-11

RSS订阅

Open Toolbar