最近在复习下oracle的存储过程,写了个简单的例子。
create or replace procedure raise_comm(v_no emp.empno%type, v_sale out emp.sale%type) as begin select sale into v_sale from emp where empno = v_no; if v_sale is null then raise_application_error(-20001, 'It is no sale for this employee'); end if; exception when no_data_found then dbms_output.put_line('The employee is not exist'); when others then dbms_output.put_line('Error No:'||SQLCODE); dbms_output.put_line(SQLERRM); end;
然后习惯性地在pl/sql下面的cmd window下测试,测试如下:
SQL>set serveroutput on; SQL>variable g_sal number; SQL>call raise_comm(7080,:g_sal); Method called g_sal ---------
看到结果当时愣了下,感觉有点不正常,我的异常信息怎么不见了,编号7080的记录不存在,不应该是这个结果,而是又换了个编号存在的继续测试,测试结果为:
SQL> call raise_comm(7821,:g_sal); Method called g_sal --------- 1250
我的异常信息真的不见了,而是换了种方式测试,找到存储过程,选中-->点击右键,选择Test
然后可以看到系统自动生成的测试方法:
在Variable下面的Value里面填值,我的一个是入参,一个是出参,只要v_no填值就OK了。先测试不存在的记录
直接按F8,在DBMS Output页签下可以看到打印结果。
在测试一个存在的正常数据。
可以看到出参用黄颜色标记了。
在测试一个异常的数据。v_no填11,可以在DBMS Output页签下面看到Exception信息。
看到Test测试正常,感觉在Cmd Window下面直接测试存储过程有点不靠谱,打印信息都不见了,仿照系统自动生成的脚本,自己写了个测试脚本。
declare g_sal number; begin raise_comm(&v_no, :g_sal); end;
在pl/sql的Cmd Window下运行:
SQL> start f:/saveFile/testsql.sql 6 / The employee is not exist PL/SQL procedure successfully completed g_sal --------- SQL> start f:/saveFile/testsql.sql 6 / PL/SQL procedure successfully completed g_sal --------- 980 SQL> start f:/saveFile/testsql.sql 6 / Error No:-20001 ORA-20001: It is no sale for this employee PL/SQL procedure successfully completed g_sal ---------
可以看到DBMS Output的打印信息。
如果不想新建一个脚本,想直接在Cmd Window 下面看到打印结果,可以这样做:
SQL> set serveroutput on SQL> declare 2 g_sal number; 3 begin 4 select sale into g_sal from emp where empno=&v_no; 5 if g_sal is null then 6 raise_application_error(-20001, 'It is no sale for this employee'); 7 end if; 8 dbms_output.put_line('The employee is not exist'); 9 dbms_output.put_line('g_sal='||g_sal); 10 exception 11 when no_data_found then 12 dbms_output.put_line('The employee is not exist'); 13 when others then 14 dbms_output.put_line('Error No:'||SQLCODE); 15 dbms_output.put_line(SQLERRM); 16 end; 17 / The employee is not exist PL/SQL procedure successfully completed SQL> SQL> declare 2 g_sal number; 3 begin 4 select sale into g_sal from emp where empno=&v_no; 5 if g_sal is null then 6 raise_application_error(-20001, 'It is no sale for this employee'); 7 end if; 8 dbms_output.put_line('The employee is not exist'); 9 dbms_output.put_line('g_sal='||g_sal); 10 exception 11 when no_data_found then 12 dbms_output.put_line('The employee is not exist'); 13 when others then 14 dbms_output.put_line('Error No:'||SQLCODE); 15 dbms_output.put_line(SQLERRM); 16 end; 17 / The employee is not exist g_sal=980 PL/SQL procedure successfully completed SQL> SQL> declare 2 g_sal number; 3 begin 4 select sale into g_sal from emp where empno=&v_no; 5 if g_sal is null then 6 raise_application_error(-20001, 'It is no sale for this employee'); 7 end if; 8 dbms_output.put_line('The employee is not exist'); 9 dbms_output.put_line('g_sal='||g_sal); 10 exception 11 when no_data_found then 12 dbms_output.put_line('The employee is not exist'); 13 when others then 14 dbms_output.put_line('Error No:'||SQLCODE); 15 dbms_output.put_line(SQLERRM); 16 end; 17 / Error No:-20001 ORA-20001: It is no sale for this employee PL/SQL procedure successfully completed
全文完。
相关推荐
首先,在数据库端创建简单的存储过程。 create or replace procedure test_msg(i_user in varchar2, o_msg out varchar2) is begin o_msg := i_user ||', Good Morning!'; end; 然后,开始在Python命令行中进行...
"源码"标签可能意味着文档中包含了存储过程的示例代码,而"工具"可能指的是Oracle提供的SQL Developer或其他数据库管理工具,这些工具可以帮助用户创建、测试和管理存储过程。 8. **Oracle CHM文件** `oracle ...
4.2.2 插入测试表调试存储过程 38 4.2.3 DBMS_OUTPUT系统内置包 39 附录一 sql*plus工具 40 附录1.1 sql*plus启动和关闭 41 附录1.2 sql*plus 环境设置 42 附录1.3 设置环境参数 42 附录1.4 sqlplus命令的执行 43 ...
Oracle存储过程是数据库管理系统Oracle中的一种重要特性,用于封装一系列SQL和PL/SQL代码,以实现特定的功能。在Oracle中,存储过程可以提高应用程序的性能,因为它减少了与数据库的交互次数,并允许在数据库级别...
在学习过程中,你可能会接触到Oracle SQL Developer、SQL*Plus等工具,它们提供友好的界面或命令行接口,帮助你创建、测试和管理存储过程。同时,了解PL/SQL编程语言的基本语法和构造也是十分必要的。通过深入实践,...
Oracle存储过程是一种预编译的SQL脚本集合,它可以包含复杂的控制流逻辑、数据处理操作等,并且能够被其他应用程序或用户通过简单的调用来执行。使用存储过程可以提高数据库应用的性能和安全性,同时简化应用程序...
3. **测试**: 测试存储过程的功能。 4. **优化**: 优化性能问题。 5. **部署**: 部署到生产环境。 ##### 6.3.6 删除过程和函数 使用`DROP`语句来删除存储过程或函数。 ```sql DROP FUNCTION function_name; DROP ...
存储过程的参数可以是简单的类型,如字符串或整数,也可以是复杂的数据类型,如Oracle的Table类型或Record类型。 接下来,Hibernate作为ORM(Object-Relational Mapping)工具,主要用于对象关系映射。在这个场景中...
SSM(Spring、SpringMVC、MyBatis)框架与Oracle数据库结合使用,尤其是在涉及到复杂的业务逻辑时,常会利用Oracle的存储过程功能。本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化...
在Oracle数据库系统中,"Job调度存储过程"和"触发器"是两种强大的工具,用于自动化数据库维护和管理任务。本教程将深入探讨这两个概念以及它们如何协同工作以实现定时更新数据库。 首先,我们来理解"Job调度存储...
2. 测试 Oracle 存储过程: 在 PL/SQL 中,使用 `DECLARE` 关键字声明变量并调用存储过程进行测试。在示例中,`param_out` 和 `param_inout` 分别声明为 `VARCHAR2` 类型,并初始化 `param_inout`。接着调用 `proce_...
Oracle数据库中的存储过程是数据库管理员和开发者常用的工具,用于封装一系列的SQL和PL/SQL语句,以便在需要时重复调用。为了增强安全性,有时我们需要对这些存储过程进行加密,防止未授权的访问和阅读。本文将详细...
oracle如果存储过程比较复杂,我们要定位到错误就比较困难,那么可以存储过程的调试功能 先按简单的存储过程做个例子,就是上次做的存储过程(proc_test) 1、先在数据库的procedures文件找到我们之前创建存储过程 ...
在Oracle数据库中创建一个名为`emp_ly`的表,用于测试存储过程。这里的示例代码展示了如何复制现有`emp`表的数据结构到新表中。 ```sql CREATE TABLE emp_ly AS SELECT * FROM emp WHERE 1 <> 1; ``` 这里使用了一...
### Oracle存储过程基本用法详解 #### 一、概述 Oracle 存储过程是一种数据库对象,可以在其中封装一系列 SQL 语句和 PL/SQL 块。存储过程可以接受输入参数,返回输出参数,并且可以执行复杂的逻辑操作。通过创建...
Oracle存储过程是数据库管理系统Oracle中的一个重要特性,它允许程序员或数据库管理员编写一组SQL语句和PL/SQL代码,形成一个可重复使用的程序单元。在Oracle中,存储过程可以接受输入参数,处理数据,执行复杂的...
### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。Oracle作为一种流行的数据库管理系统,提供了丰富的特性支持复杂查询与事务处理。结合Java...
通过OEM,可以创建新的存储过程,执行已存在的存储过程以测试,查看存储过程的定义,修改其代码,以及删除不再需要的存储过程。 【PL/SQL创建、调用、查看、修改和删除存储过程】 在PL/SQL中,创建存储过程使用`...