一、什么是存储过程和函数

1. 是被命名的pl/sql块

2. 被称之为pl/sql子程序

3. 与匿名块类似,有块结构:

声明部分是可选的(没有declare关键字)

必须有执行部分

可选的异常处理部分

二、匿名块和子程序之间的区别

三、存储过程:语法

CREATE [OR REPLACE] PROCEDURE procedure_name
[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .)]
IS|AS
procedure_body;
create or replace procedure add_dept is
v_deptment_id dept.deptno%type;
v_deptment_name dept.dname%type;
begin
v_deptment_id :=;
v_deptment_name := 'YWB';
insert into dept(deptno,dname) values(v_deptment_id,v_deptment_name);
commit;
dbms_output.put_line('插入了:'||sql%rowcount||'行');
end;

使用匿名块调用存储过程:

begin
add_dept;
end;

四、函数:

CREATE [OR REPLACE] FUNCTION function_name
[(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .)]
RETURN datatype
IS|AS
function_body;

函数与存储过程的区别:函数必须返回数据,存储过程可以返回数据,也可以不返回数据

create or replace function check_sal return boolean is
dept_id emp.deptno%type :=;
emp_no emp.empno%type :=;
salary emp.sal%type;
avg_sal emp.sal%type;
begin
select sal into salary from emp where empno=emp_no;
select avg(sal) into avg_sal from emp where deptno=dept_id;
if salary>avg_sal then
return true;
else
return false;
end if;
exception
when no_data_found then
return null;
end;

在匿名块中调用函数:

begin
if( check_sal is null) then
dbms_output.put_line('由于程序异常,输出null');
elsif (check_sal) then
dbms_output.put_line('工资高于平均工资');
else
dbms_output.put_line('工资低于平均工资');
end if;
end;

给函数传递参数:

create or replace function check_sal(empno number) return boolean is
dept_id employees.department_id%type;
sal employees.salary%type;
avg_sal employees.salary%type;
begin
select salary, department_id
into sal, dept_id
from employees
where employee_id = empno;
select avg(salary)
into avg_sal
from employees
where department_id = dept_id;
if sal > avg_sal then
return true;
else
return false;
end if;
exception
when no_data_found then
return null;
end; create or replace function check_sal(empno number) return number is
dept_id employees.department_id%type;
sal employees.salary%type;
avg_sal employees.salary%type;
begin
select salary, department_id
into sal, dept_id
from employees
where employee_id = empno;
select avg(salary)
into avg_sal
from employees
where department_id = dept_id;
if sal > avg_sal then
return ;
elsif (sal = avg_sal) then
return ;
else
return ;
end if;
exception
when no_data_found then
return null;
end; begin
if (check_sal() is null) then
dbms_output.put_line('由于程序异常,输出NULL');
elsif (check_sal() = ) then
dbms_output.put_line('工资高于平均工资');
elsif (check_sal() = ) then
dbms_output.put_line('工资等于平均工资');
else
dbms_output.put_line('工资低于平均工资');
end if;
end;

创建存储过程和函数【weber出品必属精品】的更多相关文章

  1. 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】

    <ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...

  2. 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】

    安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...

  3. 创建和管理表【weber出品必属精品】

    创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespa ...

  4. ORACLE SQL 组函数【weber出品必属精品】

    组函数:对一组数据进行加工,每组数据返回一个值 常用的组函数:count()  avg()  max()   min()  sum()   count()函数  1. count(*) :返回总共的行 ...

  5. ORACLE SQL单行函数(三)【weber出品必属精品】

    16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...

  6. ORACLE SQL单行函数(二)【weber出品必属精品】

    11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...

  7. ORACLE SQL单行函数(一)【weber出品必属精品】

    1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数 ...

  8. 数据库对象(视图,序列,索引,同义词)【weber出品必属精品】

    视图视图的定义:视图就是一个查询的别名为什么使用视图限制数据的存取 SQL> conn /as sysdba 已连接. SQL> grant create view to scott; 授 ...

  9. 使用DML语句【weber出品必属精品】

    DML语句包含以下语法: INSERT:往一个表中增加新行 DELETE:从一个表中删除掉现有的行 UPDATE:更改一个表中现有的行 INSERT语句语法:INSERT INTO TABLE(COL ...

随机推荐

  1. RAC 常用维护工具和命令(oracle 10g)

    Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrchec ...

  2. [leetcode][042] Trapping Rain Water (Java)

    我在Github上新建了一个解答Leetcode问题的Project, 大家可以参考, 目前是Java 为主,里面有leetcode上的题目,解答,还有一些基本的单元测试,方便大家起步. 题目在这里: ...

  3. Struts2 过滤器与拦截器

    学习Struts2时,发现有过滤器和拦截器,他们貌似都是一样的功能,但是为什么会有2个不同的名称呢?肯定是有区别的,所以打算自己整理一下. 过滤器,是在java web中,你传入的request,re ...

  4. JQuery实现隔行变色和突出显示当前行 效果

    运行效果如下图: jquery关键代码: <script type="text/javascript"> //该文件为:js.js // 当鼠标移到表格上是,当前一行背 ...

  5. Python 使用for代替in判断一个元素属于某个集合

    string1 = raw_input("输入in之前的字符:")string2 = raw_input("输入in之后的字符:")x = ''if len(s ...

  6. iOS开发之Runtime函数

    1.可以通过NSObject的一些方法获取运行时信息或动态执行一些消息: 1./*Returns a Boolean value that indicates whether the receivin ...

  7. Java并发编程--同步容器

    BlockingQueue 阻塞队列 对于阻塞队列,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤 ...

  8. 对CNN模块的分析

    对 CNN 模块的分析,该论文(Systematic evaluation of CNN advances on the ImageNet)已经做过了,里面的发现是非常有帮助的:   使用没有 bat ...

  9. js运算符的优先级

    自上向下优先级降低 运算符 描述 . [] () 字段访问.数组下标.函数调用以及表达式分组 ++ -- - ~ ! delete new typeof void 一元运算符.返回数据类型.对象创建. ...

  10. Android数据存储

    SharedPreferences----------->for primitive data Internal Storage-------------->for private dat ...