存储过程---初级教程

 一 创建存储过程

Java代码 复制代码 收藏代码
  1. CREATE OR REPLACE PROCEDURE cuiyaonan2000(存储过程名)
  2. (
  3. 参数1  IN  NUMBER,
  4. 参数2  IN  NUMBER,
  5. 参数3 OUT Number //如上是in表示你传递给存储过程的参数,out表示存储过程返回给你的参数.可以有多个.不同于下面的变量
  6. ) IS/AS //这里用IS 还是用AS 随个人习惯,没有什么区别
  7. 变量1 INTEGER :=0;
  8. 变量2 DATE; //如上这些是变量是存储过程的内部变量,相当于在方法内申请的局部变量.当然有全局变量,在此不做介绍.作用就是在下面的语句块中使用,和方法内部变量一致.变量可以有多个.
  9. BEGIN
  10. 这里是一些用if,while,for等流程语句控制的多个sql;
  11. END cuiyaonan2000 //结束标志
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; //如上这些是变量是存储过程的内部变量,相当于在方法内申请的局部变量.当然有全局变量,在此不做介绍.作用就是在下面的语句块中使用,和方法内部变量一致.变量可以有多个.
BEGIN
这里是一些用if,while,for等流程语句控制的多个sql;
END cuiyaonan2000 //结束标志

 

用例环境oracle数据库 PL/SQL Developer

Java代码 复制代码 收藏代码
  1. create or replace procedure cuiyaonan2000(a in number,b out number)IS
  2. first1 char;
  3. second2 number(1);
  4. third3 number := 123;
  5. begin
  6. NULL;
  7. EXCEPTION
  8. WHEN NO_DATA_FOUND THEN
  9. dbms_output.put_line('数据未找到错误');
  10. when others then
  11. dbms_output.put_line('未知错误');
  12. END;
  13. end cuiyaonan2000;
  14. //如上 := 是给变量赋值的 传统意义上的 等号
  15. //如上 := 是给变量赋值的 传统意义上的 等号
  16. //如上exception when 就是 拦截异常 跟Try catch 一样
  17. //No_data_found 是异常名 others指所有异常
  18. // dbms_output.put_line 是数据库方法 如同system.out.println
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


二. 流程控制语句

IF流程语句:

 

Java代码 复制代码 收藏代码
  1. create or replace procedure cuiyaonan2000(a in number,b out number)IS
  2. first1 char;
  3. second2 number(1);
  4. third3 number := 123;
  5. begin
  6. if a > 0 then
  7. begin
  8. dbms_output.put_line(a);
  9. b:= 123;
  10. dbms_output.put_line(a);
  11. end;
  12. end if;
  13. if third3 > 0 then
  14. begin
  15. dbms_output.put_line(third3);
  16. third3 := third3 +1;
  17. dbms_output.put_line(third3);
  18. end;
  19. end if;
  20. xception
  21. WHEN NO_DATA_FOUND THEN
  22. dbms_output.put_line('数据未找到错误');
  23. when others then
  24. dbms_output.put_line('未知错误');
  25. end cuiyaonan2000;
  26. //如上的传入参数a 不能再赋值,否则报错
  27. //如上 := 是给变量赋值的 传统意义上的 等号
  28. //b 用来接收 cuiyaonan2000存储过程返回的结果.少参数调用报错
      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;
		exception
             		WHEN NO_DATA_FOUND THEN
     				dbms_output.put_line('数据未找到错误');
			when others then 
     				dbms_output.put_line('未知错误');
     	end cuiyaonan2000;
     	//如上的传入参数a 不能再赋值,否则报错
     	//如上 := 是给变量赋值的 传统意义上的 等号
   	//b 用来接收 cuiyaonan2000存储过程返回的结果.少参数调用报错

FOR流程语句

Java代码 复制代码 收藏代码
  1. create or replace procedure cuiyaonan2000(a in number,b out number)IS
  2. Cursor cursor is select name from test_table_user;
  3. begin
  4. FOR temp IN cursor LOOP
  5. dbms_output.put_line(temp.name);
  6. END LOOP;
  7. exception
  8. WHEN NO_DATA_FOUND THEN
  9. dbms_output.put_line('数据未找到错误');
  10. when others then
  11. dbms_output.put_line('未知错误');
  12. end cuiyaonan2000;
  13. //如上 cursor 是游标 跟jdbc的游标差不多 指向一条记录.然后用循环来遍历所有查到的记录.这里for temp in 后必须是记录集合
  14.  
	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 后必须是记录集合
     

 

WHILE流程语句

Java代码 复制代码 收藏代码
  1. create or replace procedure cuiyaonan2000(a in number,b out number)IS
  2. c number :=1;
  3. begin
  4. while c < 10 LOOP
  5. begin
  6. c:= c + 1;
  7. dbms_output.put_line(c);
  8.  
  9. end;
  10. end LOOP;
  11. exception
  12. WHEN NO_DATA_FOUND THEN
  13. dbms_output.put_line('数据未找到错误');
  14. WHEN others then
  15. dbms_output.put_line('未知错误');
  16. end cuiyaonan2000;
  17.  
  18.  
	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
               			dbms_output.put_line('数据未找到错误');
         			WHEN others then 
               			dbms_output.put_line('未知错误');
     	end cuiyaonan2000;
     
     

 

这是些简单的用例,建议大家看完这些后再去研究下游标.如何调用存储过程可以在 plsql的sql命令中输入如下的代码

Java代码 复制代码 收藏代码
  1. //这里是 plsql sql窗口的测试写法
  2. //i 用来接收 cuiyaonan2000存储过程返回的结果.少参数也报错
  3. declare
  4. i integer;
  5. begin
  6. cuiyaonan2000(1,i);
  7. end;     
   //这里是 plsql sql窗口的测试写法
   //i 用来接收 cuiyaonan2000存储过程返回的结果.少参数也报错
declare 
  i integer;
begin
  cuiyaonan2000(1,i);
end;   

 

你可能感兴趣的:(存储,教程)