一 创建存储过程 www.2cto.com
Java代码
CREATE OR REPLACE PROCEDURE cuiyaonan2000(存储过程名)
(
参数1 IN NUMBER,
参数2 IN NUMBER,
参数3 OUT Number //如上是in表示你传递给存储过程的参数,out表示存储过程返回给你的参数.可以有多个.不同于下面的变量
) IS/AS //这里用IS 还是用AS 随个人习惯,没有什么区别
变量1 INTEGER :=0;
变量2 DATE; //如上这些是变量是存储过程的内部变量,相当于在方法内申请的局部变量.当然有全局变量,在此不做介绍.作用就是在下面的语句块中使用,和方法内部变量一致.变量可以有多个. www.2cto.com
BEGIN
这里是一些用if,while,for等流程语句控制的多个sql;
END cuiyaonan2000 //结束标志
用例环境oracle数据库 PL/sql Developer
Java代码
create or replace procedure cuiyaonan2000(a in number,b out number)IS
first1 char;
second2 number(1);
third3 number := 123;
begin
NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('数据未找到错误');
when others then
dbms_output.put_line('未知错误');
END;
end cuiyaonan2000;
//如上 := 是给变量赋值的 传统意义上的 等号
//如上 := 是给变量赋值的 传统意义上的 等号
//如上exception when 就是 拦截异常 跟Try catch 一样
//No_data_found 是异常名 others指所有异常
// dbms_output.put_line 是数据库方法 如同system.out.println
二. 流程控制语句 www.2cto.com
IF流程语句:
Java代码
create or replace procedure cuiyaonan2000(a in number,b out number)IS
first1 char;
second2 number(1);
third3 number := 123;
begin
if a > 0 then
begin
dbms_output.put_line(a);
b:= 123;
dbms_output.put_line(a);
end;
end if;
if third3 > 0 then
begin
dbms_output.put_line(third3);
third3 := third3 +1;
dbms_output.put_line(third3);
end;
end if;
xception
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('数据未找到错误');
when others then
dbms_output.put_line('未知错误');
end cuiyaonan2000;
//如上的传入参数a 不能再赋值,否则报错
//如上 := 是给变量赋值的 传统意义上的 等号
//b 用来接收 cuiyaonan2000存储过程返回的结果.少参数调用报错
FOR流程语句
Java代码
create or replace procedure cuiyaonan2000(a in number,b out number)IS
Cursor cursor is select name from test_table_user;
begin
FOR temp IN cursor LOOP
dbms_output.put_line(temp.name);
END LOOP;
exception
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('数据未找到错误');
when others then
dbms_output.put_line('未知错误');
end cuiyaonan2000;
//如上 cursor 是游标 跟jdbc的游标差不多 指向一条记录.然后用循环来遍历所有查到的记录.这里for temp in 后必须是记录集合 www.2cto.com
WHILE流程语句
Java代码
create or replace procedure cuiyaonan2000(a in number,b out number)IS
c number :=1;
begin
while c < 10 LOOP
begin
c:= c + 1;
dbms_output.put_line(c);
end;
end LOOP;
exception
WHEN NO_DATA_FOUND THEN