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 ...
 
随机推荐
- 【py模板】xlsx转csv
			
import numpy as np import pandas as pd def xlsx_to_csv(): data_xls = pd.read_excel('cupHaveHead1.xls ...
 - 软件开发目录规范、python常用内置模块
			
编程思想的转变 1.面条版阶段 所有的代码全部堆叠在一起.可以看成是直接将所有的数据放在C盘 视频.音频.文本.图片 2.函数版阶段 根据功能的不同封装不同的函数.可以看成是将C盘下的数 ...
 - 监控Android(生成木马)
			
生成木马: sudo su msfvenom --platform android -p android/meterpreter/reverse_tcp lhost=IP地址 lport=端口号 R ...
 - PPT排版技巧
 - python -m pip install --upgrade pip报No module named pip解决方法
			
解决方法: 1. python -m ensurepip 2. python -m pip install --upgrade pip 注意:添加pip环境变量 在python安装目录下搜索pip3或 ...
 - sqlSession封装以及CRUD的实现
			
sqlSession封装以及CRUD的实现 封装MyBatisUtil dao 定义方法 映射文件写sql语句 daoimpl实现类 实现方法 test类测试方法 整体结构
 - [论文总结] kmeans聚类和WGCNA
			
kmeans聚类和WGCNA 文章目录 kmeans聚类和WGCNA 论文1 论文2 论文3 总结 总结了3篇论文中kmeans聚类和WGCNA的运用. 论文1 Comprehensive disse ...
 - [机器学习] Yellowbrick使用笔记5-回归可视化
			
回归模型试图预测连续空间中的目标.回归计分可视化工具显示模型空间中的实例,以便更好地理解模型是如何进行预测的.代码下载 Yellowbrick已经实施了三种回归评估: 残差图Residuals Plo ...
 - [编程基础] C++多线程入门6-事件处理的需求
			
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 6 事件处 ...
 - Spark框架下均值漂移算法对舆情聚类的分析
			
知网链接 原文链接 张京坤, 王怡怡 软件导刊 2022年21卷第6期 页码:141-146 DOI:10.11907/rjdk.211889 中图分类号:TP274 纸质出版日期:202 ...