创建存储过程和函数【weber出品必属精品】
一、什么是存储过程和函数
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出品必属精品】的更多相关文章
- 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】
<ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...
- 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】
安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...
- 创建和管理表【weber出品必属精品】
创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespa ...
- ORACLE SQL 组函数【weber出品必属精品】
组函数:对一组数据进行加工,每组数据返回一个值 常用的组函数:count() avg() max() min() sum() count()函数 1. count(*) :返回总共的行 ...
- ORACLE SQL单行函数(三)【weber出品必属精品】
16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...
- ORACLE SQL单行函数(二)【weber出品必属精品】
11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...
- ORACLE SQL单行函数(一)【weber出品必属精品】
1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数 ...
- 数据库对象(视图,序列,索引,同义词)【weber出品必属精品】
视图视图的定义:视图就是一个查询的别名为什么使用视图限制数据的存取 SQL> conn /as sysdba 已连接. SQL> grant create view to scott; 授 ...
- 使用DML语句【weber出品必属精品】
DML语句包含以下语法: INSERT:往一个表中增加新行 DELETE:从一个表中删除掉现有的行 UPDATE:更改一个表中现有的行 INSERT语句语法:INSERT INTO TABLE(COL ...
随机推荐
- Oracle ACL (Access Control List)详解
在Oracle11g中,Oracle在安全方面有了很多的改进,而在网络权限控制方面,也有一个新的概念提出来,叫做ACL(Access Control List), 这是一种细粒度的权限控制.在ACL之 ...
- ORACLE用户操作的一些常用操作总结【weber出品】
一.创建一个表空间 create tablespace pioneer_data datafile '/u01/datafile/pioneer_datadbf' size 100m autoexte ...
- HTML写的第一个邮箱登陆界面
自己动手去写才会有收获,宁可模仿也不要全部复制粘贴 不说了,直接上代码.CSS有注释,适合新手. <!doctype html> <html> <head> < ...
- 读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数
在之前的理论上调用对象的operator=是这样做的 void swap(A& x) { std::swap(a, x.a); } A& operator=(const A& ...
- uva 10107 - What is the Median?
#include <cstdio> #include <iostream> using namespace std; ]; int main() { int i, cur_in ...
- django settings最佳配置
# encoding=utf-8 import os import socket SITE_ID = 1 # 项目的根目录 # 简化后面的操作 PROJECT_ROOT = os.path.dirna ...
- C语言初学 判断闰年的问题
#include<stdio.h> main( ) { int year , leap; scanf("%d",&year); i ...
- 一个关于poi导出的API
先准备需要的参数 参数1:String title=“用户信息” 参数2:String[] headers String[] headers = { "用户名", "昵称 ...
- ROC曲线和PR曲线
转自:http://www.zhizhihu.com/html/y2012/4076.html分类.检索中的评价指标很多,Precision.Recall.Accuracy.F1.ROC.PR Cur ...
- ImageView显示不出来图片
问题?? 用ImageView控件方法:public void setImageBitmap(Bitmap bm)来显示生成的bimap,结果在图片显示区域显示一片空白,而且其他控件颜色没变化,造成I ...