oracle存储过程中加减法,Oracle 存储过程基础组件

[TOC]

### 变量

*****

变量名 + 变量类型。声明变量:

```

countNum number(10); --别忘了写上具体的长度,并且以分号结束

maxId number(10); --别忘了写上具体的长度,并且以分号结束

```

定义`type`的写法为`type type_name is record(col_name col_type);`这样,括号里可以写多个,中间用`,`分割,但最后一个不能有`,`,具体如下

```

set serveroutput on;

DECLARE

TYPE new_type IS RECORD --以TYPE type_name IS RECORD开始

(

v_ly_nl LY_DS.LY_NL%TYPE,

v_ly_mc varchar(100) --最后不要加,

); --最后以 ;结束

v_obj new_type; --将新对象定义为刚才声明的类型

BEGIN

--into赋值给v_obj,会按照定义的type顺序赋值

select ly_nl,ly_mc into v_obj from ly_ds where id='2';

dbms_output.put_line('第一个变量:'||v_obj.v_ly_nl);

dbms_output.put_line('第二个变量:'||v_obj.v_ly_mc);

END;

```

通过`%ROWTYPE`的声明写法

`%ROWTYPE`该类型是提取行记录时常用的存储数据的方式。这种声明方式,可以直接引用表中的行作为变量类型,它同`%TYPE`在优点上类似,避免因表中字段的数据类型改变,而导致`PL/SQL`块出错的问题。

下边是`%ROWTYPE`的用法例子,挺简单的:

```

set serveroutput on;

DECLARE

v_obj ly_ds%rowtype; --ROWTYPE不区分大小写

BEGIN

--into赋值给v_obj,会按照定义的type顺序赋值

select * into v_obj from ly_ds where id='2';

dbms_output.put_line('第一个变量:'||v_obj.ly_nl);

dbms_output.put_line('第二个变量:'||v_obj.ly_mc);

END;

```

>注意一个地方,**就是上边的`into`前边,只能为`*`,如果要写为具体的列,那就要写全**。

### 流程控制

*****

if

```

if ... then

elsif ... then

else

end if;

```

case

```

declare i number;

BEGIN

select count(*) into i from DVD_DVD;

case i

when 0 then dbms_output.put_line(0);

when 1 then dbms_output.put_line(1);

when 2 then dbms_output.put_line(2);

when 3 then dbms_output.put_line(3);

when 4 then dbms_output.put_line(4);

when 5 then dbms_output.put_line(5);

else dbms_output.put_line('else');

end case;

end;

```

while

```

```

### 循环

无条件循环 LOOP

```

declare

i number := 1;

j number := 0;

begin

loop

/* 另一种写法

if i >= 11 then

exit;

end if;

*/

exit when i>=5;

j := j + i;

i := i + 1;

end loop;

dbms_output.put_line(j);

end;

```

while循环

```

declare

i number := 1;

j number := 1;

begin

while i <= 100 loop

if mod(i, 2) = 0 then

j := j * i;

end if;

i := i + 1;

end loop;

dbms_output.put_line(j);

dbms_output.put_line(length(to_char(j)));

end;

```

for 循环

```

declare

i number := 1;

j number := 1;

begin

for i in 1..100 loop

if mod(i, 2) = 0 then

j := j * i;

end if;

end loop;

dbms_output.put_line(j);

dbms_output.put_line(length(to_char(j)));

end;

```

### 日期转化

```

declare

c_d varchar2(30);

d_d date;

c_d := '2017-1-1 00:00:00';

s,'yyyy-mm-dd hh24:mi:ss')

c_d = to_char(d_d,'yyyy-mm-dd hh24:mi:ss')

```

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值