oracle中的pl SQL,Oracle中的pl/sql

什么是pl/sql

pl/sql是一种编程语言,是oracle对sql语句的扩展。在普通语句的使用上增加了编程语言的特点,所以PL/sql就是把数据操作和查询语句组织在PL/sql代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

PL/sql的作用

使用PL/sql可以编写具有很多高级功能的程序,虽然通过多个sql语句可能也能实现同样的功能,但是相比而言,PL/sql具有更为明显的一些优点:

⒈能够使一组sql语句的功能更具模块化程序特点;

⒉采用了过程性语言控制程序的结构;

⒊可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断;

⒋具有较好的可移植性,可以移植到另一个Oracle数据库中;

⒌集成在数据库中,调用更快;

⒍减少了网络的交互,有助于提高程序性能。

PL/sql程序的基本结构

块由四个基本部分组成:声明、执行体开始、、执行体结束。

下面是四个部分的基本结构:

DECLARE——可选部分

变量、常量、游标、用户定义异常的声明

……

BEGIN——必要部分

语句和语句构成的执行程序

EXCEPTION——程序出现异常时,捕捉异常并处理异常

END;——必须部分

在数据库执行

PL/sql

程序时,

语句和

语句是分别进行解析和执行的。

块被数据库内部的

引擎提取,将

语句取出送给

Oracle

引擎处理,两种语句分别在两种引擎中分析处理,在数据库内部完成数据交互、处理过程。

变量:

1.普通变量*v_i varchar2(20);

2.列变量*v_cos student.stu_name%type;

3.记录(行)变量*v_row student%rowtype;

declare

v_stut_student%rowtype;

begin

select * into v_stu fromt_studentwhere sid = 1207;

dbms_output.put_line(v_stu.sname);

end;

VARIABLE变量名数据类型;

不能在sql window中写要在Command window中或者黑窗口展示

:VAR[IABLE] [ [ NUMBER |CHAR | CHAR (n [CHAR|BYTE]) |

VARCHAR2 (n [CHAR|BYTE]) |NCHAR | NCHAR (n) |

NVARCHAR2 (n) | CLOB |NCLOB | REFCURSOR |

BINARY_FLOAT |BINARY_DOUBLE ] ]

variable v_all varchar2;

begin

:v_all:=:v_all||'~abc';

dbms_output.put_line(:v_all);

end;5.表一位数组变量

type类型名字is table of类型index bybinary_integer;

引用名字;

declare

type t_table is table ofvarchar2(20)index by binary_integer;

(typet_abcis table oft_student.sid%typeindex by binary_integer;)

v_tablet_table;

begin

v_table(1):='abc';

v_table(2):='def';

v_table(3):='lll';

v_table(4):='kkk';

dbms_output.put_line(v_table(2));

end

;

条件控制

:单分支结构、双分支、多分支结构

单分支结构

IF条件 THEN

--条件结构体

END IF;

说明:

① 用IF 关键字开始,END IF关键字结束,注意END IF后面有一个分号。

② 条件部分可以不使用括号,但是必须以关键字THEN来标识条件结束,如果条件成

立,则执行THEN后到对应END IF之间的语句块内容。如果条件不成立,则不执行

条件语句块的内容。

③ java结构用一对大括号来包含条件结构体的内容。PL/sql中关键字THEN到ENDIF之

间的内容是条件结构体内容。

④ 条件可以使用关系运算符合逻辑运算符。

双分支

IF条件 THEN

--条件成立结构体

ELSE

--条件不成立结构体

END IF;

多分支结构

IF条件1 THEN

--条件1成立结构体

ELSIF条件2 THEN

--条件2成立结构体

ELSE

--以上条件都不成立结构体

END IF;

或:

CASE [selector]

WHEN表达式1 THEN语句序列1;

WHEN表达式2 THEN语句序列2;

WHEN表达式3 THEN语句序列3;

……

[ELSE语句序列N];

END CASE;

CASE

WHEN判断1 THEN语句序列1;

WHEN判断2 THEN语句序列2;

WHEN判断3 THEN语句序列3;

……

[ELSE语句序列N];

END CASE;

循环结构

PL/sql提供了丰富的循环结构来重复执行一些列语句。Oracle提供的循环类型有:

1.无条件循环LOOP-ENDLOOP语句

LOOP

--循环体

(exit when ***; if *** then exid;)

END LOOP;

2. WHILE循环语句

WHILE 条件 LOOP

--循环体

END LOOP;

3.FOR循环语句

FOR循环变量 IN [REVERSE]循环下限..循环上限 LOOP LOOP

--循环体

END LOOP;

在上面的三类循环中EXIT用来强制结束循环,相当于java循环中的break。

例:使用loop:计算1到100的和;

declare

v_i binary_integer := 1;

v_sum binary_integer := 0;

begin

loop

v_sum := v_sum + v_i;

v_i := v_i + 1;

if v_i = 101 then

exit;

end if;

end loop;

dbms_output.put_line(v_sum);

end;

使用while

declare

v_i binary_integer := 1;

v_sum binary_integer := 0;

begin

while v_i <= 50 loop

v_sum := v_sum + v_i;

v_i := v_i + 1;

end loop;

dbms_output.put_line(v_sum);

end;

使用for

declare

v_i binary_integer := 1;

v_sum binary_integer := 0;

begin

for v_i in 1..100loop

v_sum := v_sum + v_i;

end loop;

dbms_output.put_line(v_sum);

end

;

顺序结构

在程序顺序结构中有两个特殊的语句。GOTO和NULL

 GOTO语句

GOTO语句将无条件的跳转到标签指定的语句去执行。标签是用双尖括号括起来的标示

符,在PL/sql块中必须具有唯一的名称,标签后必须紧跟可执行语句或者PL/sql块。

GOTO不能跳转到IF语句、CASE语句、LOOP语句、或者子块中。

 NULL语句

NULL语句什么都不做,只是将控制权转到下一行语句。NULL语句是可执行语句。NULL

语句在IF或者其他语句语法要求至少需要一条可执行语句,但又不需要具体操作的地

方。比如GOTO的目标地方不需要执行任何语句时。

declare

v_i number := 10;

begin

if v_i > 5 then

goto f_label;

else

goto s_label;

end if;

<>

dbms_output.put_line('哈哈');

<>

null

执行ddl语句

begin

execute immediate 'createtable T(id number)';

end;

PL/sql的异常处理

BEGIN

--可执行部分

EXCEPTION--异常处理开始

WHEN异常名1 THEN

--对应异常处理

WHEN异常名2 THEN

--对应异常处理

……

WHEN OTHERS THEN

--其他异常处理

END;

declare

v_i number;

begin

select sid into v_i fromt_studentwhere sename ='Orange';

exception

whenno_data_found then

dbms_output.put_line('哈哈');

end;

declare

v_inumber;

begin

v_i := 10/0;

exception

whenno_data_found then

dbms_output.put_line('哈哈');

when others then

dbms_output.put_line('ok');

end

;

注意:

Set serveroutputon(显示输出)

/ 可以执行前一次的sql语句

begin

dbms_output.put_line('hello world!');

end;

dbms_output.put('hello world!');

这句后面必须有dbms_output.put_line

(

'hello world!'

);

才会输出put中的内容(必须有put_line)

总结

以上是编程之家为你收集整理的Oracle中的pl/sql全部内容,希望文章能够帮你解决Oracle中的pl/sql所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值