--编写一个存储过程,给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存储过程的创建实例和调用实例的更多相关文章

  1. 在ORACLE存储过程中创建临时表

    在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...

  2. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  3. ORACLE存储过程的创建和执行的简单示例和一些注意点

    此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SE ...

  4. Oracle 存储过程的创建,及触发器调用存储过程

    一.创建存储过程 1.存储过程写法 create or replace procedure HVM_BYQ_TJ --变压器统计信息--->入库 (id in number) as begin ...

  5. oracle存储过程的创建和使用

    创建存储过程: 格式:create or replace procedure procedure_name(参数 参数类型) Is/as 变量1 变量1的类型: begin ----------业务逻 ...

  6. SQLServer中存储过程StoredProcedure创建及C#调用(转)

    此文作为入门了解用,转自http://www.2cto.com/database/201502/378260.html 存储过程就是已经编译好的.优化过的放在数据库服务器中的一些SQL语句:可供应用程 ...

  7. 在oracle存储过程中创建暂时表

    在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create o ...

  8. ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行

    ORACLE存储过程里游标遍历.调用job定时运行 1,第一种使用For 循环 for循环是比較简单有用的方法. 首先.它会自己主动open和close游标.攻克了你忘记打开或关闭游标的烦恼. 其次, ...

  9. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  10. oracle存储过程实例

    oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...

随机推荐

  1. 【机器学习】李宏毅——自注意力机制(Self-attention)

    前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢? 这一类的场景包括文字识别.语音识别.图网络等等. 那么先来考虑输出的类 ...

  2. 网易云VIP音乐NCM文件转MP3,C语言版本。

    前言 网易云的Vip音乐下载下来,格式不是mp3/flac这种通用的音乐格式,而是经过加密的ncm文件.只有用网易云的音乐App才能够打开.于是想到可不可以把.ncm文件转换成mp3或者flac文件, ...

  3. 第一百一十四篇: JS数组Array(三)数组常用方法

    好家伙,本篇为<JS高级程序设计>第六章"集合引用类型"学习笔记   1.数组的复制和填充 批量复制方法 copyWithin(),以及填充数组方法fill(). 这两 ...

  4. md5-有道翻译

    网站 aHR0cHMlM0EvL2ZhbnlpLnlvdWRhby5jb20v 测试发现三个值是变化的 一.第一种方法 initiator一步一步找,在t.translate中找到以下内容 这里可以看 ...

  5. 在windows上构建OpenCascade

    基于作者QuaoarsWorkshop的视频Open Cascade Lessons,讲的非常详细,观看需要魔法 什么是OCCT?. 首先,Open CASCADE Technology SDK 是一 ...

  6. [OpenCV实战]47 基于OpenCV实现视觉显著性检测

    人类具有一种视觉注意机制,即当面对一个场景时,会选择性地忽略不感兴趣的区域,聚焦于感兴趣的区域.这些感兴趣的区域称为显著性区域.视觉显著性检测(Visual Saliency Detection,VS ...

  7. 如何理解scanf(“%d %d”,a,b)==2和scanf(“%d”,a)=1【摘抄笔记ψ(._. )>】

    scanf 函数有一个返回值,0表示接受输入失败,1表示接受输入成功. while(scanf("%d",&x)==1) 的意思就是: 当接收输入变量x的值成功的时候,继续 ...

  8. 常用的SQL命令:

    丢弃指定的数据库,如果存在的话 DROP DATABASE IF EXISTS xuezi; 创建新的数据库 CREATE DATABASE xuezi; 进入数据库xuezi     USE xue ...

  9. angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到

    方案1.改变文件目录 不改变访问地址:XXXPRO 是部署的服务器上面的 文件夹名称 ng build --prod --base-href /XXXPRO 方案2.改变访问地址录同时改变文件目录-- ...

  10. 第一个C程序

    写C代码 创建工作区 创建工程 创建文件(.c源文件..h头文件) main函数是程序执行的入口,有且只有一个 函数printf(print function打印函数)[库函数-C语言本身提供给我们使 ...