Oracle存储过程的创建实例和调用实例
--编写一个存储过程,给emp表中添加数据。
--方法一:
create or replace procedure add_employee(
eno number,
name varchar2,
salary number,
job varchar2 default 'CLERK',
dno number
)
is
begin
insert into emp (empno,ename,sal,job,deptno) values (eno,name,salary,job,dno);
end;
--方法二:
create or replace procedure add_employee_1(
eno number,
name varchar2,
salary number,
job varchar2 default 'CLERK',
dno number
)
is
emp_null_error exception; --声明异常变量
pragma exception_init( emp_null_error, -1400 ); --把异常变量和异常编号-1400绑定.-非空约束
emp_no_deptno exception ; --声明异常变量
pragma exception_init ( emp_no_deptno, -2291 );--外键约束
begin
insert into emp ( empno,ename,sal,job,deptno )values( eno,name,salary,job,dno);
exception
when DUP_VAL_oN_INDEX then
RAISE_APPLICATION_ERROR( -20000, '该雇员以存在' );
when emp_null_error then
RAISE_APPLICATION_ERROR( -20001, '部门编号不能为空' );
when emp_no_deptno then
RAISE_APPLICATION_ERROR( -20002, '不存在该部门编号' );
end;
--调用存储过程
--在sql提示符下调用
--外键约束
SQL> exec add_employee( 1111,'MARY', 2000, 'MANAGER', 66 );
begin add_employee( 1111,'MARY', 2000, 'MANAGER', 66 ); end;
ORA-02291: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 未找到父项关键字
ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10
ORA-06512: 在 line 1
--异常部门为空
SQL> exec add_employee(1111,'MARY', 2000, 'MANAGER', null);
begin add_employee(1111,'MARY', 2000, 'MANAGER', null); end;
ORA-01400: 无法将 NULL 插入 ("SCOTT"."EMP"."DEPTNO")
ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10
ORA-06512: 在 line 1
--正确,按位置传参
SQL> exec add_employee(1111,'MARY', 2000, 'MANAGER', 10);
PL/SQL procedure successfully completed
--雇员编号重复
SQL> exec add_employee(1111,'MARYE', 3000, 'MANAGER', 20);
begin add_employee(1111,'MARYE', 3000, 'MANAGER', 20); end;
ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10
ORA-06512: 在 line 1
--正确,按名字传参
SQL> exec add_employee(eno=>1112,name=>'MARYE', salary=>3000, job=>'MANAGER',dno=> 20);
PL/SQL procedure successfully completed
--混合传参
SQL> exec add_employee(1113,name=>'MACLE', salary=>3000, job=>'CLERK',dno=> 20);
PL/SQL procedure successfully completed
--错误的混合传参
SQL> exec add_employee(1113,name=>'MACLE', 3000, job=>'CLERK',dno=> 20);
begin add_employee(1113,name=>'MACLE', 3000, job=>'CLERK',dno=> 20); end;
ORA-06550: 第 1 行, 第 40 列:
PLS-00312: 一个定位相关参数没有说明其相关性
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
--pl/sql 调用存储过程
declare
emp_20000 exception;
pragma exception_init(emp_20000, -20000);
emp_20001 exception;
pragma exception_init(emp_20001, -20001);
emp_20002 exception;
pragma exception_init(emp_20002, -20002);
begin
--异常。部门不存在
add_employee_1(7369,'MARAY',2010,'SALESMAN',66);
EXCEPTION
when emp_20000 then
dbms_output.put_line( 'emp_20000 雇员编码不能重复');
when emp_20001 then
dbms_output.put_line( 'emp_20001 部门编号不能为空');
when emp_20002 then
dbms_output.put_line( 'emp_20002 不存在该部门编号');
when others then
dbms_output.put_line( '出现了其他异常错误');
end;
Oracle存储过程的创建实例和调用实例的更多相关文章
- 在ORACLE存储过程中创建临时表
在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...
- Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...
- ORACLE存储过程的创建和执行的简单示例和一些注意点
此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SE ...
- Oracle 存储过程的创建,及触发器调用存储过程
一.创建存储过程 1.存储过程写法 create or replace procedure HVM_BYQ_TJ --变压器统计信息--->入库 (id in number) as begin ...
- oracle存储过程的创建和使用
创建存储过程: 格式:create or replace procedure procedure_name(参数 参数类型) Is/as 变量1 变量1的类型: begin ----------业务逻 ...
- SQLServer中存储过程StoredProcedure创建及C#调用(转)
此文作为入门了解用,转自http://www.2cto.com/database/201502/378260.html 存储过程就是已经编译好的.优化过的放在数据库服务器中的一些SQL语句:可供应用程 ...
- 在oracle存储过程中创建暂时表
在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create o ...
- ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行
ORACLE存储过程里游标遍历.调用job定时运行 1,第一种使用For 循环 for循环是比較简单有用的方法. 首先.它会自己主动open和close游标.攻克了你忘记打开或关闭游标的烦恼. 其次, ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- oracle存储过程实例
oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...
随机推荐
- webpack :There are multiple modules with names that only differ in casing
1, webpack版本3.6.0 2. 报warning文件为 node_modules 下面webpack 里的hot.js和dev-server.js 3. 没有出现模块名混用大小写 解决方法: ...
- 3D旋转不能对齐,元素边倾斜
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(36)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-上篇
1.简介 Fiddler是一款强大的HTTP抓包工具,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有 ...
- <一>C++ STL
STL (standard template libaray - 标准模板库):是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架. 通俗来说:STL就 ...
- MongoDB 强制使用索引 hint
转载请注明出处: 虽然MongoDB 查询优化器一般工作的很不错,但是也可以使用 hint() 来强迫 MongoDB 使用一个特定的索引.在这种方法下某些情形下会提升性能. 一个有索引的 colle ...
- 【基础篇】一文带你掌握 Redis
一.摘要 谈起 Redis,相信大家都不会陌生,做过云平台开发的程序员多多少少会接触到它,Redis 英文全称:Remote Dictionary Server,也被称之为远程字典服务. 从官方的定义 ...
- 【转载】SQL SERVER 将多行数据合并成一行
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes ep_name A ...
- 使用IDEA创建一个maven的web项目并部署到tomcat上
目录 1.创建一个maven项目 2.为项目添加配置文件 3.创建一些类和jsp页面 4.将项目部署到tomcat 1.创建一个maven项目 打开IDEA,File--New--Project 选择 ...
- Spark详解(07-1) - SparkStreaming案例实操
Spark详解(07-1) - SparkStreaming案例实操 环境准备 pom文件 <dependencies> <dependency> &l ...
- mysql 1366 - Incorrect string value
mysql 插入中文时报错 mysql 1366 - Incorrect string value... 这是由于 数据库 / 表 / 表字段 编码格式未设置好造成的 解决办法: 1.查看编码是否符 ...