PL/SQL存储过程
存储过程相当于一个有名字的PL/SQL块,经过第一次编译后再次调用时不需要再次编译

创建格式:

CREATE [OR REPLACE] PROCEDURE proc_name [list of parameters] 
IS    
   Declaration section 
BEGIN    
   Execution section  
EXCEPTION    
  Exception section 
END; 

返回值:

可有可没有

例子:

1> CREATE OR REPLACE PROCEDURE employer_details
2> IS 
3>  CURSOR emp_cur IS 
4>  SELECT first_name, last_name, salary FROM emp_tbl;
5>  emp_rec emp_cur%rowtype;
6> BEGIN 
7>  FOR emp_rec in sales_cur 
8>  LOOP 
9>  dbms_output.put_line(emp_cur.first_name || ' ' ||emp_cur.last_name
10>    || ' ' ||emp_cur.salary);
11> END LOOP;
12>END;
13> /

执行:

1)  EXECUTE [or EXEC] procedure_name;

2) 在另一个存储过程里面时:  procedure_name;


PL/SQL函数

函数和存储过程最大的区别是:函数必须有返回值。
 
创建语法:
CREATE [OR REPLACE] FUNCTION function_name [parameters] 
RETURN return_datatype;  
IS  
Declaration_section  
BEGIN  
Execution_section 
Return return_variable;  
EXCEPTION  
exception section  
Return return_variable;  
END; 

例子:

1> CREATE OR REPLACE FUNCTION employer_details_func
2>    RETURN VARCHAR(20);
3> IS 
5>    emp_name VARCHAR(20); 
6> BEGIN 
7>	SELECT first_name INTO emp_name
8>	FROM emp_tbl WHERE empID = '100';
9>	RETURN emp_name;
10> END;
11> / 

执行:

1) employee_name := employer_details_func;(给变量赋值)

2) SELECT employer_details_func FROM dual;(作为查询语句一部分)

3) dbms_output.put_line(employer_details_func);(PL/SQL里使用)


PL/SQL存储过程和函数中的参数

1) IN-parameters 
    默认参数类型,相当于一般编程语言里的函数参数,只读,不能改变其值。 
用法: 
CREATE [OR REPLACE] PROCEDURE procedure_name(param_name1 [IN] datatype) 
2) OUT-parameters 
    只写,不可以用其值,但是可为其指定值。 
用法: 
CREATE [OR REPLACE] PROCEDURE procedure_name(param_name OUT datatype) 
3) IN OUT-parameters
    可读可写 
用法: 
CREATE [OR REPLACE] PROCEDURE procedure_name(param_name IN OUT datatype)
例1:

创建一个有IN和OUT参数的存储过程

1> CREATE OR REPLACE PROCEDURE emp_name (id IN NUMBER, emp_name OUT NUMBER)               
2> IS               
3> BEGIN             
4>    SELECT first_name INTO emp_name             
5>    FROM emp_tbl WHERE empID = id;             
6> END;               
7> /             

在PL/SQL块中调用emp_name存储过程.

1> DECLARE               
2>  empName varchar(20);               
3>  CURSOR id_cur SELECT id FROM emp_ids;               
4> BEGIN               
5> FOR emp_rec in id_cur               
6> LOOP               
7>   emp_name(emp_rec.id, empName);               
8>   dbms_output.putline('The employee ' || empName || ' has id ' || emp-rec.id);               
9> END LOOP;              
10> END;               
11> /

例2:

创建一个有IN OUT参数的存储过程
1> CREATE OR REPLACE PROCEDURE emp_salary_increase                
2> (emp_id IN emptbl.empID%type, salary_inout IN OUT emptbl.salary%type)                 
3> IS                
4>    tmp_sal number;                
5> BEGIN                
6>    SELECT salary                
7>    INTO tmp_sal                
8>    FROM emp_tbl               
9>    WHERE empID = emp_id;                
10>   IF tmp_sal between 10000 and 20000 THEN                
11>      salary_inout := tmp_sal * 1.2;                
12>   ELSIF tmp_sal between 20000 and 30000 THEN                
13>      salary_inout := tmp_sal * 1.3;                
14>   ELSIF tmp_sal > 30000 THEN                
15>      salary_inout := tmp_sal * 1.4;                
16>   END IF;               
17> END;               
18> / 
在PL/SQL块中调用emp_salary_increase存储过程.
1> DECLARE               
2>    CURSOR updated_sal is               
3>    SELECT empID,salary               
4>    FROM emp_tbl;               
5>    pre_sal number;               
6> BEGIN               
7>   FOR emp_rec IN updated_sal LOOP                
8>       pre_sal := emp_rec.salary;                
9>       emp_salary_increase(emp_rec.empID, emp_rec.salary);               
10>       dbms_output.put_line('The salary of ' || emp_rec.empID || 		   
11>                ' increased from '|| pre_sal || ' to '||emp_rec.salary);               
12>   END LOOP;                
13> END;                
14> /




PL/SQL学习(四)存储过程和函数的更多相关文章

  1. PL/SQL学习笔记_03_存储函数与存储过程

    ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. 存储函数:有返回值,创建完成后,通过select function() from dua ...

  2. pl/sql 笔记之存储过程、函数、包、触发器(下)

    一.存储过程.存储函数   1.What's This? ①.ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数. ②.存储过程.存储函数的唯 ...

  3. PL/SQL编程(1) - 存储过程,函数以及参数

    存储过程 PROCEDURE [schema.]name[( parameter[, parameter...] ) ] [AUTHID DEFINER | CURRENT_USER ] [ACCES ...

  4. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  5. MYSQL数据库学习十四 存储过程和函数的操作

    14.1 为什么使用存储过程和函数 一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句. 存储过程和函数的优点: 允许标准组件式编程,提高了S ...

  6. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...

  7. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  8. 剑指Offer——常用SQL语句、存储过程和函数

    剑指Offer--常用SQL语句.存储过程和函数 常用SQL语句 1.在MySQL数据库建立多对多的数据表关系 2.授权.取消授权 grant.revoke grant select, insert, ...

  9. pl/sql developer中dbms_output.put_line函数的运用

    pl/sql developer中dbms_output.put_line函数可以打印想显示在屏幕上的信息,运用时需要注意几点: 1 必须处于begin   ...  end: 2 需要先执行 set ...

  10. 在PL/SQL中调用存储过程--oracle

    在oracle10中写好了存储过程,代码如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE ...

随机推荐

  1. HTML几类标签的应用总结

    打开DREAMWEAVER,新建HTML,如下图: body的属性: bgcolor 页面背景色 background  背景壁纸.图片 text  文字颜色 topmargin  上边距 leftm ...

  2. javascript-智能社-JS基础A笔记

    JavaScript基础A JavaScript组成 ECMA : 全称ECMAScript,解释器.计算机语言的翻译 DOM:全称Document Object Model,赋予了JS操作HTML的 ...

  3. javaSE-基础部分整理

    JavaSE基础部分整理 1.java介绍 1.Java分为三个部分: javaSE,javaEE,javaME; java重要性之一:跨平台(操作系统). 跨平台:一次编译,到处运行. Java虚拟 ...

  4. Java利用正则表达式统计某个字符串出现的次数

    //统计某个字符出现的次数 private void countSubString(){ String string1="香蕉.玉米.面粉"; String string2=&qu ...

  5. 【转】Spring websocket 使用

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html https://spr ...

  6. creating normals from alpha/heightmap inside a shader

    http://www.polycount.com/forum/showthread.php?t=117185 I am making some custom terrain shaders with ...

  7. RHCA学习笔记:RH442-Unit5 队列原理

    NIT 5 Queuing Theory 队列原理 目标: 1.明白性能调优的关键术语       2. 应用队列技术解决性能问题       3.明白性能调优的复杂性   5.1    Introd ...

  8. .Net设计模式_工厂模式(3)

    3.抽象工厂模式 引言: 我们知道汽车需要很多部件才能组装成一辆成品的车,那么我们需要汽车厂生产很多东西,如:马达.车轴.轮胎等,这些东西组装起来后成为了一辆车. 这些东西就是产品族,图解:(出之ht ...

  9. bootstrap整理-1

    基本的HTML模板 小伙伴们,上一小节的视频课程已经对Bootstrap提供的模板做了详细的介绍,在这一小节中我们把这个模板代码粘贴过来,以供你们学习查看,你们可以根据实际情况在此基础上进行扩展,只需 ...

  10. Yii::app()方法详解

    Yii::app()方法详解 1.Yii::app()返回的是一个当前框架应用程序的对象 2.Yii::app()是framework/web/CWebApplication.php类实例化的对象,所 ...