一、子程序的概念。
a.是一个命名的pl/SQL块。
b.通常能够接收传递的参数,能够被别人调用。
c.基于标准的PL/SQL块结构,包括声明部分,可执行呢部分,异常处理部分,结束部分。
二、子程序的类型.
a.存储过程:通常执行的是某个动作。
b.函数:通常执行的某个计算。
三、存储过程
是一种执行某项动作的子程序,被当做一个数据库对象保存在数据库内,能够被反复调用。
四、创建存储过程的语法:
Create [Or Replace] Procedure 存储过程名[(参数列表)] Is|As PL/SQL块。
说明:参数列表形式为 参数名 [参数模式] 参数的数据类型,如果有多个参数,每个参数之间用,分割。
参数模式:包括三种,分别为in、out 、in Out,当参数模式省略时,表示该参数为in模式。
参数数据类型:此处数据类型只能写类型名,不能写长度。
Is|as后面为变量声明,不需要加declare关键字。
结束部分即可以用end;也可以用end 存储过程名;来结束。
Create Or Replace Procedure p_1
Is
v_deptname Varchar2(20) :='c';
Begin
Insert Into dept Values(16,v_deptname,'newyork');
Commit;
End p_1;
五、存储过程的调用。
1、在另一个块里调用:直接写存储过程名,传递相应的参数即可。
2、在Sql-plus里调用:exec 存储过程名(参数列表);
六、 如何编辑一个存储过程
1、可以直接sql-window写一个,写完之后按F8,查看是否有编译错误。
2、通过new-program window-Procedure来创建,写完之后按F8编译,如果有编译错误,在存储过程名
上点击右键,edit修改,重新编译。
3、直接通过command_window创建,如果有编译错误,执行show errors命令查看。
七、存储过程的三种参数模式:
in:默认模式,相当于一个常数,该模式的参数在存储过程中不能被修改。在参数列表中可以指定默认值。
Out:该模式的参数相当于一个变量,不可以在参数列表中指定默认值。
In Out:该模式的参数相当于一个初始化的变量,不可以在参数列表中指定默认值。
练习:
1、创建一个存储过程,该存储过程的功能是通过指定的员工编号及工资,
更新相应编号的员工工资,在原基础上增加,并把更新后的员工工资返回。
Create Or Replace Procedure raise_sal3(p_empno emp.empno%Type,p_sal In Out emp.sal%Type) Is
Begin
Update emp Set sal = sal + p_sal Where empno = p_empno;
Select sal Into p_sal From emp Where empno = p_empno;
End;
2、写一个匿名块,调用上述存储过程。
Declare
v_sal emp.sal%Type;
Begin
v_sal :=200;
raise_sal3(7788,v_sal);
dbms_output.put_line(v_sal);
End;
八、调用存储过程时传递参数的方式。
1、按照位置方式传递。
2、按名称方式传递。
Declare
v_sal emp.sal%Type;
Begin
v_sal :=200;
raise_sal3(p_sal => v_sal,p_empno => 7788);
dbms_output.put_line(v_sal);
End;
3、组合方式传递:第一个参数按照位置传递,其余参数按照名称方式传递。
Declare
v_sal emp.sal%Type;
Begin
v_sal :=200;
raise_sal3(7788,p_sal => v_sal);
dbms_output.put_line(v_sal);
End;
练习:
1、为部门表添加一个字段maxnum,整型,该字段表示部门编制。
Alter Table dept Add maxnum Number;
2、为该字段赋予不同的值。
Select * From dept For Update
3、创建一个存储过程add_emp,该存储过程实现添加员工的功能,参数为emp%rowtype类型。
当某个部门的员工数超过该部门的最大编制时,使用异常处理方式提示用户"该部门人数编制已满,不能再添加员工"。
Create Or Replace Procedure add_emp(p_emp emp%Rowtype) Is
v_maxnum Number;
v_currnum Number;
e_too_many Exception;
Begin
Select maxnum Into v_maxnum From dept Where deptno = p_emp.deptno;--查询部门编制
Select Count(empno) Into v_currnum From emp Where deptno = p_emp.deptno ;--查询部门当前人数
If v_currnum >=v_maxnum Then
Raise e_too_many;
Else
Insert Into emp Values(p_emp.empno,p_emp.ename,p_emp.job,p_emp.mgr,p_emp.hiredate,p_emp.sal,p_emp.comm,p_emp.deptno);
dbms_output.put_line('录入成功');
End If;
Exception
When e_too_many Then
dbms_output.put_line('该部门编制已满');
End;
4、写一个存储过程call_addemp,验证上述存储过程的正确性。
Create Or Replace Procedure call_addemp Is
v_emp emp%Rowtype;
Begin
Select * Into v_emp From emp Where empno= 7788;
v_emp.empno := 7789;
add_emp(v_emp);
End;
九、本地子程序
:声明在另一个存储过程中的存储过程,使用procedure 存储过程名 方式来声明,本地子程序的有效范围是
被限制在他们定义的父块中。而且必须写在所有的变量声明之后。
十、删除存储过程。
练习:编写一个简单的Oracle存储过程:要求根据主管编号显示出其直接下级员工和所有下级员工(提示:入参为主管编号)
Create Or Replace Procedure show_nextlevel(p_empno emp.empno%Type) Is
Cursor emp_cursor Is Select Level,ename From emp Where empno <> p_empno Start With empno = p_empno Connect By Prior empno=mgr ;
Begin
For emp_record In emp_cursor Loop
If emp_record.Level =2 Then
dbms_output.put_line('员工'||emp_record.ename||'为直接下级');
Else
dbms_output.put_line('员工'||emp_record.ename||'为间接下级');
End If;
End Loop;
End;
--调用存储过程块
Begin
show_nextlevel(p_empno => 7839);
End;
分享到:
相关推荐
2. **存储过程和函数**:存储过程和函数是PL/SQL中的核心特性,它们可以在数据库服务器上执行,减少了网络通信,提高了性能。 3. **游标**:游标是PL/SQL处理单条记录的工具,尤其在处理大量数据集时非常有用,可以...
6. **子程序**:PL/SQL支持函数和过程的定义,这些子程序可以在多个地方重复使用,降低了代码的冗余。 7. **包(Packages)**:包是将相关的类型、变量、常量、过程和函数组合在一起的命名实体,便于管理和重用。 ...
"Oracle8 PL/SQL程序设计"是一本专门介绍这个主题的书籍,书中包含了大量的示例脚本,帮助读者深入理解PL/SQL的各个方面。这些脚本是用英文编写的,旨在让全球的开发人员都能理解和应用。 在提供的压缩包文件中,...
1. **PL/SQL简介**:PL/SQL是Oracle数据库的内置编程语言,用于创建存储过程、函数、触发器和包。它的语法基于SQL,但增加了流程控制、异常处理和数据类型等特性。 2. **变量和数据类型**:PL/SQL支持多种数据类型...
其中 PL/SQL(Procedural Language for SQL)是一种专门用于增强 SQL 功能的过程化语言,它可以编写存储过程、函数、触发器等,极大地扩展了 SQL 的能力。 #### 二、PL/SQL 概念与特点 **1. 结构化编程** PL/SQL ...
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
Oracle PL/SQL是一种...书中可能包含各种类型的PL/SQL程序设计技巧,从简单的存储过程和函数到复杂的事务处理和并发控制策略。通过实例学习,你将能够更好地理解和运用这些概念,提升你在Oracle数据库开发中的技能。
PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库提供的一个结合了SQL语句和过程式编程语言的编程环境。它主要用于管理和控制Oracle数据库,是Oracle数据库开发的核心工具之一。PL/SQL...
2. **集成性**:PL/SQL直接嵌入到Oracle数据库中,可以创建存储过程、函数、触发器等数据库对象,执行效率高,数据访问安全。 3. **事务处理**:PL/SQL支持ACID(原子性、一致性、隔离性和持久性)原则,允许开发者...
Oracle SQL是Oracle数据库系统的核心语言,而PL/SQL则扩展了SQL的功能,提供了过程化编程的能力,使得数据库管理和开发更加高效和灵活。下面将详细阐述PL/SQL的相关知识点。 1. PL/SQL基础:PL/SQL是Oracle特有的...
"Oracle资料学习PL/SQL必备"这个主题涵盖了对Oracle数据库系统以及PL/SQL编程语言的学习资源,特别是针对那些希望深入理解并掌握PL/SQL的初学者或专业人士。PL/SQL的基础部分是了解和使用Oracle数据库的关键,它包括...
在Oracle环境中,PL/SQL用于创建存储过程、函数、触发器、游标以及包,这些元素可以帮助开发者实现数据处理和业务逻辑的高效管理。 2. **中文支持的重要性**:对于中文用户而言,PL/SQL的中文补丁极大地提升了用户...
PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...
免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的计算机环境间快速切换。 这款绿色版PL/SQL Developer包含了所有必要的组件和配置文件,确保...
4. **存储过程和函数**:PL/SQL允许创建在数据库服务器端执行的存储过程和函数,提高了代码复用性和执行效率。 5. **游标**:游标是PL/SQL中处理单行记录的重要工具,可以用于遍历查询结果集。 6. **变量和类型**...
4. **存储过程和函数**:PL/SQL支持创建存储过程和函数,这些可以被封装在数据库中,并且可以在不同的应用程序中重用。 5. **对象支持**:自PL/SQL 8.0版本起,PL/SQL增加了对对象的支持,允许使用面向对象的编程...
7. **存储过程和函数**:存储过程是一组预编译的PL/SQL语句,可以在需要时多次调用,减少网络通信,提高效率。函数则返回一个值,可以作为其他表达式的一部分。 8. **触发器**:触发器是数据库中的自动执行的PL/SQL...
14. **PL/SQL与Java集成**:通过PL/SQL调用Java存储过程,实现两种技术的融合。 通过"Oracle Database 12c PL/SQL开发指南"中的实例源代码,读者可以亲手实践上述各种概念和技术,从而更深入地理解和掌握PL/SQL的...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...