--编写一个存储过程,给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. 组策略编辑器(gpedit.msc)找不到文件解决方法

    打开[此电脑]中的C盘,依次打开Windows-system32-gpedit.msc,或者输入:C:\Windows\System32\gpedit.msc,查看是否存在gpedit.msc文件(没 ...

  2. java中加号的用法

    注意java中+号的使用 public class Add { public static void main(String[] args) { System.out.println(100+80); ...

  3. CTFshow——funnyrsa2

    题目如下: 题目分析: 发现n很小,可以考虑yafu分解n,或者使用在线网站,例如:http://factordb.com/.即得p,q,r.因为常规rsa只有p和q,则phi = (p -1) * ...

  4. 分享一个自己在用的.net 中mysql事务控制类(支持多条sql,参数化,自定义判断条件,错误点返回等)

    1)首先看下事务控制器. using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using Sys ...

  5. [C#]从两个例子理解async/await

    1 例子1 输出的结果为: 可以看出执行的结果为:A--D--B--C--E. 我们再看下一个例子(注意,我们把代码中D和E的位置交换) 2 例子2 结果: 结果为:A--B--C--E--D 3 理 ...

  6. windows安装wordcloud遇到的坑汇总

    pip install wordcloud报错,缺少visual studio包 不要偷懒,一定要从报错的地方去下载完整版本 然后安装c++ 重启后就不会报错了

  7. CSS文字超出宽度---换行总结

     2021-5-5重新总结---CSS文字超出宽度---附代码 <!DOCTYPE html> <html lang="en"> <head> ...

  8. ng + zorro angular表格横纵向合并,横向目前是手动,纵向是自动合并,微调后可适配三大框架使用

    表格横纵向合并,可以看一下代码编写之前和之后的样式,先上图~~ 表格页面文件.html <h1>正常表格</h1> <nz-table #colSpanTable [nz ...

  9. Python自动批量修改文件名称的方法

      本文介绍基于Python语言,按照一定命名规则批量修改多个文件的文件名的方法.   已知现有一个文件夹,其中包括班级所有同学上交的作业文件,每人一份:所有作业文件命名格式统一,都是地信1701_姓 ...

  10. 9月28日——while循环知识补充、for循环、break及continue生效范围和range方法的介绍

    目录 今日内容总结 一.while循环内容补充 1.死循环 2.嵌套和全局标志位 二.循环结构之for循环 概念介绍 for循环结构: 1.for结构 2.for...else结构 三.break和c ...