Oracle数据库---存储过程、存储函数
--创建存储过程
CREATE OR REPLACE PROCEDURE first_proc
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('我是过程');
DBMS_OUTPUT.PUT_LINE('Hello Everyone!');
END;
--创建函数
CREATE OR REPLACE FUNCTION first_func
RETURN VARCHAR2
IS
BEGIN
DBMS_OUTPUT.put_line('我是函数');
RETURN 'Hello Everyone!';
END;
--调用存储过程
BEGIN
first_proc;
END;
--调用存储函数
BEGIN
DBMS_OUTPUT.put_line(first_func);
END;
--1:创建输入参数的存储过程
--根据员工号删除指定的员工信息
CREATE OR REPLACE PROCEDURE proc1
(v_empno IN empnew.empno%TYPE)
IS
BEGIN
--根据员工号删除指定的员工信息
DELETE FROM empnew WHERE empno = v_empno;
--判断是否删除成功
IF SQL%NOTFOUND THEN
-- -20000~ -20999之间
RAISE_APPLICATION_ERROR(-20008,'指定删除的员工不存在!');
ELSE
DBMS_OUTPUT.put_line('删除成功!');
END IF;
END;
--2;创建带有输出参数的存储过程
--求指定部门的平均工资和总人数
CREATE OR REPLACE PROCEDURE proc2
(v_deptno IN NUMBER, v_avgsal OUT NUMBER, v_cnt out NUMBER)
IS
BEGIN
SELECT AVG(sal),COUNT(*)
INTO v_avgsal, v_cnt
FROM emp
WHERE deptno = v_deptno;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('没有此部门!');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;
--3:创建带有输入输出参数的存储过程
--实现两个数的交换
CREATE OR REPLACE PROCEDURE proc3
(v_num1 IN OUT NUMBER, v_num2 IN OUT NUMBER)
AS
v_temp NUMBER := 0;
BEGIN
v_temp:= v_num1;
v_num1:= v_num2;
v_num2:= v_temp;
END;
--1:创建带有输入参数的存储函数
--根据部门编号返回该部门的总工资
CREATE OR REPLACE FUNCTION func1
(v_deptno IN NUMBER)
RETURN NUMBER
IS
v_sumsal NUMBER;
BEGIN
SELECT SUM(SAL) INTO v_sumsal FROM emp WHERE deptno = v_deptno;
RETURN v_sumsal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有此部门!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
--2:创建带有输出参数的存储函数
--根据员工号输出员工的姓名和员工的工资,并且返回员工的年收入
CREATE OR REPLACE FUNCTION func2
(v_empno IN emp.empno%TYPE, v_name OUT emp.ename%TYPE, v_sal OUT emp.sal%TYPE)
RETURN NUMBER
IS
v_salsum NUMBER;
BEGIN
SELECT ename,sal,(sal+nvl(comm,0))*12
INTO v_name,v_sal,v_salsum
FROM emp
WHERE empno = v_empno;
RETURN v_salsum;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('没有此员工!');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;
--3:创建带有输入输出参数的存储函数
--求两个数的平方和,并输出两个数的平方
CREATE OR REPLACE FUNCTION func3
(n1 IN OUT NUMBER, n2 IN OUT NUMBER)
RETURN NUMBER
AS
BEGIN
n1 := n1*n1;
n2 := n2*n2;
RETURN n1+n2;
END;
--调用无参的存储过程
begin
first_proc;
end;
--调用带有输入参数的存储过程
begin
proc1(1234);
end;
--调用带有输出参数的存储过程
DECLARE
v_avgsalary NUMBER;
v_count NUMBER;
BEGIN
PROC2(10,v_avgsalary,v_count);
DBMS_OUTPUT.put_line('平均工资:'||v_avgsalary);
DBMS_OUTPUT.put_line('总人数:'||v_count);
END;
--调用带有输入输出参数的存储过程
DECLARE
v_n1 NUMBER := 5;
v_n2 NUMBER := 10;
BEGIN
PROC3(v_n1,v_n2);
DBMS_OUTPUT.put_line('N1:'||v_n1);
DBMS_OUTPUT.put_line('N2:'||v_n2);
END;
--删除存储过程
DROP PROCEDURE proc1;
--调用无参的函数
BEGIN
DBMS_OUTPUT.put_line(first_func);
END;
--调用带有输入参数的函数
BEGIN
DBMS_OUTPUT.put_line('部门的工资总额'||func1(&no));
END;
--调用带有输出参数的函数
DECLARE
v_name emp.ename%TYPE;
v_sal emp.sal%TYPE;
v_salsum NUMBER;
BEGIN
v_salsum := func2(&no,v_name,v_sal);
DBMS_OUTPUT.put_line('姓名:'||v_name);
DBMS_OUTPUT.put_line('工资:'||v_sal);
DBMS_OUTPUT.put_line('年收入:'||v_salsum);
END;
--调用带有输入输出参数的函数
DECLARE
v_n1 number :=5;
v_n2 number :=6;
v_sum number;
BEGIN
v_sum := func3(v_n1,v_n2);
DBMS_OUTPUT.put_line('N1的平方:'||v_n1);
DBMS_OUTPUT.put_line('N2的平方:'||v_n2);
DBMS_OUTPUT.put_line('平方和:'||v_sum);
END;
--删除存储函数
DROP FUNCTION func1;
--求部门的年收入
CREATE OR REPLACE FUNCTION func4
(v_deptno IN NUMBER DEFAULT 10,v_t IN NUMBER)
RETURN NUMBER
IS
v_sumsal NUMBER;
BEGIN
SELECT SUM((sal+nvl(comm,0))*12)
INTO v_sumsal
FROM emp
WHERE deptno = v_deptno;
DBMS_OUTPUT.put_line('测试:'||v_t);
RETURN v_sumsal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('没有此部门');
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(SQLERRM);
END;
--调用
declare
v_totalsal number;
begin
v_totalsal := func4(v_t=>1);
dbms_output.put_line(v_totalsal);
end;
Oracle数据库---存储过程、存储函数的更多相关文章
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- oracle数据库之存储函数和过程
一.引言 ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它.这样就叫存储过程或函数.过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块 ...
- Oracle数据库—— 存储过程与函数的创建
一.涉及内容 1.掌握存储过程与函数的概念. 2.能够熟练创建和调用存储过程与函数. 二.具体操作 1.创建存储过程,根据职工编号删除scott.emp表中的相关记录. (1)以scott 用户连接数 ...
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- Oracle学习(十二):存储过程/存储函数
1.知识点 --第一个存储过程 /* 打印Hello World create [or replace] PROCEDURE 过程名(參数列表) AS PLSQL子程序体: 调用存储过程: 1. ex ...
- oracle数据库存储过程中NO_DATA_FOUND不起作用解决
oracle数据库存储过程中NO_DATA_FOUND不起作用 1.首先创建一个表lengzijiantest,表中只有一个字段f_id ? 1 2 3 4 5 [cpp] CREATE TABLE ...
- oracle数据库存储过程中的select语句的位置
导读:在oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句. 先看下这个存储过 ...
- Oracle数据库游标,序列,存储过程,存储函数,触发器
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- 编程开发之--Oracle数据库--存储过程和存储函数(1)
1.存储过程和存储函数 描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数 区别:存储函数可以通过return子句返回一个函数的值 (1)存储过程 语法:create [or re ...
随机推荐
- liunx 查看php 安装的扩展
/usr/local/php5/bin/php -i |less 查看配置文件在哪里,编译参数 /usr/local/php5/bin/php -m |less 查看php加载的模块
- windows下,Qt Creator 中javascript调试器安装并使用
最开始使用Qt Creator时,想使用断点来调试javascript代码.但在按下debug键后,却提示调试器未配置,让我比较郁闷. 好了,郁闷的是说了,咱们来说说高兴的.要Qt Creator调试 ...
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)
[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...
- 【Python】:用python做下百度2014笔试题
国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度.题目是从[大卫David]那里copy过来的. 1.给定任意一个正 ...
- 毕设(二)C#SerialPort
毕业设计中,用到串口与无人机通信,所以就用到了SerialPort这个类,这个类在设置属性时, 用到最主要的属性应该是COM口和波特率,由于本人不熟悉硬件,不便多说,但经验告诉我是这样的, 还有数据位 ...
- Delphi 7.0常用函数速查手册(磁盘文件类)
在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数.字符串.数组操作函数.文件.磁盘操作函数.内存.指针操作函数.数学运算函数.日期函数. 在Delphi中调用函 ...
- WPF与WinForm的抉择
微软曾经对WPF(代号Avalon)抱很大的期望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不承认.几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸 ...
- <iOS小技巧> 返回上级目录操作Goback()方法
Goback()方法功能:返回上一级界面,通过判断 popViewControllerAnimated 类型是否为空,来判断是present还是pop出来,然后直接做了releaseSelf操作: - ...
- C#基础原理拾遗——引用类型的值传递和引用传递
以前写博客不深动,只搭个架子,像做笔记,没有自己的思考,也没什么人来看.这个毛病得改,就从这一篇开始- 最近准备面试,深感基础之重要,奈何我不是计算机科班出身,基础方面有些捉襟见肘.短期怎么补?做面实 ...
- ES 21 - Elasticsearch的高级检索语法 (包括term、prefix、wildcard、fuzzy、boost等)
目录 1 term query - 索引词检索 1.1 term query - 不分词检索 1.2 terms query - in检索 2 prefix query - 前缀检索 3 wildca ...