一、存储过程创建语句:
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
