一、存储过程创建语句:
CREATE OR REPLACE PROCEDURE 存储过程名
(
变量1 IN 数据类型, -- 详解见①
变量2 OUT 数据类型
)
IS/AS -- 变量声明块:IS或者AS用于声明变量
参数1 数据类型(值范围);
参数2 数据类型(值范围);
BEGIN -- 过程语句块:begin开始为PL/SQL体
PL/SQL体;
EXCEPTION -- 异常处理块:exception开始处理出现的异常。可选
WHEN OTHERS THEN
ROLLBACK;
RAISE; -- 抛出异常。在过程语句块中抛出用:raise+异常名
END;
①参数
* 参数可以有,也可以没有。
* 参数只需声明数据类型,无需声明长度。长度有外部调用者决定。
* 参数传递方式有三种:IN,OUT,IN OUT。若未声明参数传递方式,默认IN。
(1)IN。
IN表示传入参数(值传递),并且IN参数在存储过程中不允许重新赋值。否则编译提示以下错误:
错误:PLS-00363: expression 'V_PARA1' cannot be used as an assignment target
(2)OUT。
OUT表示传出参数(引用传递)。OUT型变量无法在被调用前赋值,即使在被存储过程调用前对其赋值,其本身也是个空值。
(3)IN OUT。
IN OUT即可做传入参数,也可做传出参数(真正的按引用传递参数)。
二、语法
1. 变量赋值
v_test := 123;
2. SELECT ... INTO ...
将查询结果赋值给变量。可以同时将多个列的查询结果赋值给多个变量,但是必须保证有且仅有一条数据,否则抛出异常。
3. if判断
if 条件 then
begin
函数体;
end;
end if;
create or replace procedure PRO_TEST
( x varchar
)
is
v_para varchar2(10);
begin
v_para1 := 0;
if x>0 then
begin
v_para1 := v_para1+x;
end;
elsif x=0 then
begin
v_para1 := x;
end;
else
begin
v_para1 := v_para1-x;
end;
end if;
dbms_output.put_line(v_para1);
end;
4. while循环
while 条件 loop
begin
函数体;
end;
end loop;
create or replace procedure test_pro
is
v_para1 varchar2(20);
begin
v_para1 := 0;
while v_para1<4 loop
v_para1 := v_para1+1;
end loop;
dbms_output.put_line(v_para1);
end;
5. for循环
for 变量 in 游标名 loop
begin
函数体;
end;
end;
Oracle的数据类型:
1.字符串类型
(1)固定长度(未达到指定长度补空格,未指定长度默认为1):char、nchar(Unicode编码)
(2)可变长度(未达到指定长度补空格,不可以不指定长度):varchar2、nvarchar2(Unicode编码)
2.数字类型
NUMBER(p,s)p为整数长度,s为小数长度。
INTEGER 整数
BINARY_FLOAT 单浮点
BINARY_DOUBLE 双浮点、
FLOAT(N) 浮点数,N为精度
3.日期类型
DATE
TIMESTAMP