- 浏览: 490089 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
win2011ccc:
...
jstl EL表达式遍历Map -
winterwd:
懂了。插入数字应该使用jxl.write.Number参见下文 ...
用java将数据写入excel -
winterwd:
感谢分享。可是我的程序里面,NumberFormat不能初始化 ...
用java将数据写入excel -
waainli:
Oraxcel这个插件是怎么使用的啊?如何安装和使用。可以详细 ...
Oracle数据的导入和导出(Excel) -
FYIHDG:
key
jstl EL表达式遍历Map
1、 PL/SQL语句块
PL/SQL语句块只适用于Oracle数据库,使用时临时保存在客户端,而不是保存在数据库。
基本语法:
declare
变量声明、初始化
begin
业务处理、逻辑代码
exception
异常捕获
end;
变量声明:<变量名> <类型及长度> [:=<初始值>]
例:v_name varchar2(20):=’张三’;
例:见第3节
2、 循环语句
loop循环语法:
loop
exit when 表达式
end loop;
while循环语法:
while 表达式 loop
end loop;
for循环语法:
for <变量> in <变量取值范围(小值..大值,如1..100)> loop
end loop;
for循环的变量可不做声明及初始化。
例:见第3节
3、 if判断语句
基本语法:
if <表达式> then
…
else if <表达式> then
…
else
…
end if;
end if;
例:
declare
v_identity number(4):=0;
begin
loop
if v_identity=1 then
dbms_output.put_line('v_identity=1');
else if v_identity=3 then
dbms_output.put_line('v_identity=3');
else if v_identity=6 then
exit;
else
dbms_output.put_line('v_identity is not 1 or 3');
end if;
end if;
end if; -- 注意,有多少个if就要有多少个end if结束标志。
v_identity:=v_identity+1;
end loop;
exception
when others then dbms_output.put_line('error!');
end;
/
4、 分支case
基本语法:
case <变量>
when 常量 then
…
when 常量 then
…
else
…
end case;
例:
declare
v_number number(4):=3;
v_string varchar(20):='abc';
begin
case v_number
when 1 then
dbms_output.put_line('v_number is '||1);
when 2 then
dbms_output.put_line('v_number is '||2);
when 3 then
dbms_output.put_line('v_number is '||3);
end case;
case v_string
when 'ab' then
dbms_output.put_line('v_string is '||'ab');
when 'bc' then
dbms_output.put_line('v_string is '||'bc');
else -- 缺省匹配
dbms_output.put_line('v_string is other value');
end case;
exception
when others then dbms_output.put_line('error!');
end;
/
5、 异常(exception)
声明异常语法:<异常名> exception;
抛出异常语法:raise <异常名>;
捕获异常语法:when <异常名> then 异常处理语句;
例:
declare
v_input varchar2(1):='&throw';-- 动态输入
v_exception_1 exception; -- 自定义异常
v_exception_2 exception;
others exception; -- 系统异常
begin
if v_input='1' then
raise v_exception_1; -- 抛出异常
else if v_input='2' then
raise v_exception_2;
else
raise others;
end if;
end if;
exception
-- 捕获异常
when v_exception_1 then dbms_output.put_line('throw exception: v_exception_1');
when v_exception_2 then dbms_output.put_line('throw exception: v_exception_2');
when others then dbms_output.put_line('throw exception: others');
end;
/
6、 游标(cursor)
声明游标语法:cursor <游标名> is select语句;
声明ref游标语法:<游标名> is ref cursor;
打开游标语法:open <游标名>;
移动游标并获取数据语法:fetch <游标名> into <用于保存读取的数据的变量的名>;
关闭游标语法:close <游标名>;
游标属性(游标的属性必须在关闭游标之前):
%isopen: 判断游标是否打开
%notfound: 找不到数据时
%found:
%rowcount: 返回当前游标已扫描的数据行数量
游标分类:1、显示游标(自定义游标);2、隐示游标(系统游标);3、REF游标
例:
declare
v_row t_test%rowtype; -- 匹配t_test表中一行所有的数据类型
cursor v_cur is select * from t_test;-- 声明游标
begin
open v_cur;-- 打开游标
loop
fetch v_cur into v_row;-- 将游标所在行的数据转存到v_row中
exit when v_cur%notfound; -- 当游标到最后一行时跳出
dbms_output.put_line('id = '||v_row.t_id||' name = '||v_row.t_name||' msg = '||v_row.t_msg);
end loop;
close v_cur;-- 关闭游标
exception
when others then dbms_output.put_line('throw exception: others');
end;
/
-- REF游标 --
create or replace package upk_select_test
as type uc_test is ref cursor; -- 声明ref游标
end upk_select_test;
/
-- 存储过程中调用ref游标,并将查询结果以游标的方式返回
create or replace procedure up_select_test_2
(uc_result out upk_select_test.uc_test)
is
begin
open uc_result for select * from t_test;
end up_select_test_2;
/
7、 通配类型操作符
%type: 通配某行某列数据类型,如v_name t_test.t_name%type;通配表t_test中的t_name。
%rowtype: 通配一行所有列的数据类型,如 v_row t_test%rowtype;匹配t_test表中一行
所有的数据类型。
8、 存储过程(procedure)
基本语法:
create procedure <过程名>(<参数列表,无参时忽略>)
as|is
变量声明、初始化
begin
业务处理、逻辑代码
exception
异常捕获、容错处理
end <过程名>;
参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2
in:入参
out:出参
in out:出入参
注:as|is表示as或is
调用语法:
1)、exec <过程名>;
2)、execute <过程名>;
3)、在PL/SQL语句块中直接调用。
例:
create or replace procedure up_wap(v_param1 in out varchar2,v_param2 in out varchar2)
is
v_temp varchar2(20);
begin
dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2);
v_temp:=v_param1;
v_param1:=v_param2;
v_param2:=v_temp;
dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2);
exception
when others then dbms_output.put_line('There is a error when the procedure up_wap executing!');
end up_wap;
/
-- 调用存储过程
declare
v_param1 varchar2(20):='param1';
v_param2 varchar2(20):='param2';
begin
up_wap(v_param1 => v_param1,v_param2 => v_param2);
end;
/
9、 自定义函数(function)
基本语法:
create function <函数名>(<参数列表,无参时忽略>)
return <返回值类型,无长度说明>
as|is
变量声明、初始化
begin
业务处理、逻辑代码
return <返回的值>;
exception
异常捕获、容错处理
end <函数名>;
参数:in 入参
注:只有入参的类型。
在存储过程和自定义函数中的参数的传递(入参和出参)不能使用%type或%rowtype匹配,不能使用空值null,但是存储过程可以返回空值。
例:
create function uf_select_name_by_id_test(v_id in number)
return varchar2
is
v_name t_test.t_name%type;
begin
select t_name into v_name from t_test where t_id=v_id;
return v_name;
exception
when others then dbms_output.put_line('error');
end uf_select_name_by_id_test;
/
select uf_select_name_by_id_test(1) 姓名 from dual;-- select调用
declare --pl/sql语句块调用
v_name varchar2(20);
begin
v_name:=uf_select_name_by_id_test(1);
dbms_output.put_line('name = '||v_name);
end;
/
10、包(package)
封装,可以封装过程(procedure)、函数(function)和变量。
注意,在包(package)中声明的过程(procedure)和函数(function)必须在包的实现体
(package body)中定义实现。
基本语法:
create package <包名>
as|is
变量声明
存储过程声明
自定义函数声明
end <包名>;
/
create package <包名,与声明部分一致>
as|is
存储过程的代码实现
自定义函数的代码实现
end <包名>;
/
例:
-- 创建包upk_hello
create or replace package upk_hello
is
v_hello_world varchar2(20):='hello world'; -- 声明变量
procedure up_hello_world(v_name in varchar2);-- 声明过程
function uf_hello_world(v_name in varchar2) return varchar2;-- 声明函数
end upk_hello;
/
-- 实现包(upk_hello)里声明的方法
create or replace package body upk_hello
is
procedure up_hello_world(v_name in varchar2)
is
v_string varchar2(100);
begin
v_string:=v_name||' say hello world!';
dbms_output.put_line(v_string);
exception
when others then dbms_output.put_line('error');
end up_hello_world;
function uf_hello_world(v_name in varchar2) return varchar2
is
v_string varchar2(100);
begin
v_string:=v_name||' say hello world!';
return v_string;
exception
when others then dbms_output.put_line('error');
end uf_hello_world;
end upk_hello;
/
-- 包的调用
declare
v_msg varchar2(100);
begin
upk_hello.up_hello_world('bing');
v_msg:=upk_hello.uf_hello_world('admin');
dbms_output.put_line(v_msg);
dbms_output.put_line(upk_hello.v_hello_world);
end;
/
发表评论
-
PL SQL里测试procedure
2011-11-24 11:12 1381SQL> set serveroutput on;SQL ... -
procedure: 一个最简单的oracle存储过程"proc_helloworld"
2011-11-22 17:28 1589本文通过一个最简单的oracle存储过程"proc_ ... -
Oracle数据的导入和导出(Excel)
2011-10-13 16:38 9219一般导入数据到Oracle有几种方法!这可是经验之谈哦!分 ... -
excel 里的数据导入oracle数据库(2)
2011-10-13 11:03 1315有一个比较麻烦但保证 ... -
excel 里的数据导入oracle数据库
2011-10-13 10:59 14431 准备Excel导入数据 2 把Excel文件另存为(文本 ... -
Oracle 创建索引的基本规则总结
2011-09-14 00:35 2973一、B-Tree索引 1. ... -
unique index and constraint
2011-09-01 18:20 20111. 测试unique index 和 unique co ... -
oracle带时分秒日期的比较
2010-11-19 10:29 3678oracle 中不带时分秒的字符串 to_date 转换时 ... -
oracle SQL语句
2010-07-06 17:39 1059查找重复记录: select names,num fro ... -
Oracle中null的使用
2010-07-06 17:28 1343问:什么是NULL?答:在我们不知道具体有什么数据的时 ... -
主键与外键之ORA-02292: integrity constraint
2010-07-06 16:27 28024今天在删除一个表某条记录时,出现如下错误:ORA-02292: ... -
PL/SQL Developer使用技巧
2010-06-10 11:10 22511、右键菜单在PL/SQL De ... -
oracle 查询执行顺序
2010-06-09 21:18 3773oracle 语句提高查询效率的方法 1:.. where c ... -
ORA-01855: AM/A.M. or PM/P.M. required问题排查与解析
2010-06-09 19:12 36471.【问题现象】在中文Wi ... -
ORA-01810: 格式代码出现两次
2010-06-09 19:11 2370今天在做sql查询时发现了这样的问题,在网上搜索找到了答案,是 ... -
PL/SQL开发时,异常“ORA-01722: 无效数字或者ORA-01722: invalid number”的原因分析(二)
2010-04-27 10:38 8096我们在写PL/SQL语句时,经常会用到字符串A与数字B的比较, ... -
PL/SQL开发时,异常“ORA-01722: 无效数字或者ORA-01722: invalid number”的原因分析(一)
2010-04-27 10:36 4758如果是字符型的列,在记录中存在非数值的值,那么在隐转换的时候就 ... -
Ora-00054 resource busy and acquire with nowait specified
2010-04-23 10:09 2794当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增 ... -
Oracle中的空格函数和trim(' ')
2009-12-17 15:20 112331、可以使用LPAD和RPAD在字符串的左边 和右边填补空 ... -
trunc
2009-12-03 16:18 1879TRUNC()函數分兩種: 1.TRUNC(for date ...
相关推荐
标题和描述中提到的“大型项目Oracle sql,function,procedures,package,cursor,job”涉及的是Oracle数据库管理和开发的核心概念。以下是对这些概念的详细解释: 1. **SQL(Structured Query Language)**:SQL...
在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...
what => 'my_package.my_procedure;', next_date => SYSDATE + 1, interval => 'SYSDATE + 1/24' ); COMMIT; END; ``` 通过理解和熟练使用这些Oracle对象,开发者能够构建复杂的数据库应用程序,优化查询...
在Oracle中,存储过程可以通过引用游标(Ref Cursor)来返回结果集。Ref Cursor是一种特殊类型的游标,它可以指向一个结果集,这个结果集可以被传递给其他程序单元。当存储过程被调用时,它可以在内部执行SQL查询,...
PROCEDURE proc_test (v_emp_cursor OUT sp_emp_cursor, v_sal IN NUMBER) IS BEGIN -- 实现逻辑 OPEN v_emp_cursor FOR SELECT * FROM emp WHERE sal > v_sal; END; END; ``` 在上述示例中,我们定义了一个包...
Oracle PL/SQL是一种强大的编程语言,它将SQL与过程式编程语言的功能相结合,为数据库管理员和开发者提供了在Oracle数据库环境中创建复杂应用的能力。这个参考文档是Oracle PL/SQL的全面指南,涵盖了从基础到高级的...
- **Oracle** 支持使用 `PACKAGE` 组织多个存储过程、函数等对象。 - Oracle示例: ```sql CREATE OR REPLACE PACKAGE my_package AS PROCEDURE do_something; END my_package; CREATE OR REPLACE PACKAGE ...
根据提供的文件信息,我们可以归纳出以下关于Oracle PL/SQL编程的重要知识点: ### 一、创建包(Package)及其声明 #### Package Specification (包规范) 在Oracle数据库中,**包**是一种将过程、函数、类型、游标...
12. Oracle的游标(CURSOR)用于处理PL/SQL代码中的多行数据。 13. Oracle的事务处理关键字COMMIT用于提交事务,ROLLBACK用于回滚事务。 14. Oracle的事务控制语句SAVEPOINT和SET TRANSACTION。 关于Oracle数据库...
Oracle数据库是全球广泛使用的大型企业级数据库管理系统,其在数据存储、处理和管理方面的功能强大,性能优秀。本文将深入探讨Oracle的高级编程概念,包括安装过程和关键特性。 一、Oracle数据库安装 Oracle数据库...
OracleParameter p1 = new OracleParameter("mycs", OracleType.Cursor); p1.Direction = ParameterDirection.Output; cmd.Parameters.Add(p1); OracleDataAdapter da = new OracleDataAdapter(cmd); DataSet ...
### ORACLE转DB2对照全解 #### 一、Oracle SQL PL与DB2 inline SQL PL对比 本章节主要介绍Oracle SQL PL与DB2 inline SQL PL之间的对比,包括但不限于存储过程、触发器、用户定义函数(UDF)、条件语句及流程控制...
1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包(package) 7 1.3.1 包的基本结构 ...
### Oracle程序包详解 #### 一、程序包概念与作用 在Oracle数据库中,程序包是一种组织PL/SQL代码的有效方式。它通过将相关的数据类型、常量、变量、游标、异常、函数和过程封装在一起,使得这些元素可以在多个...
在开发中,将紧密相关的PROCEDURE和FUNCTION封装在包内,编译包体时不会影响到调用这些存储过程的其他代码。 绑定变量的使用是SQL优化的关键。避免在动态SQL中使用常量,而应使用绑定变量,以减少解析次数,提高...
为了实现这一功能,通常需要定义一个包(Package),其中包含一个过程,该过程接受参数并返回一个引用游标(Ref Cursor)。 示例代码: ```sql CREATE OR REPLACE PACKAGE pkg_test AS TYPE myrctype IS REF ...
-- procedure and function declarations END; CREATE OR REPLACE PACKAGE BODY package_name IS -- procedure and function definitions END; ``` - **示例**: - 定义一个包`emp_sal_update`,包含增加...
cstmt.registerOutParameter(1, OracleTypes.CURSOR); cstmt.setInt(2, 100); cstmt.execute(); ResultSet rs = (ResultSet) cstmt.getObject(1); while (rs.next()) { System.out.println(rs.getString(1)); ...
- **过程(Procedure)和函数(Function)**:过程用于执行一系列操作,不返回值;函数执行操作并返回一个值。 - **包(Package)**:集合相关的过程和函数,提供更好的封装和管理。 5. **控制结构**: - **循环...
- 程序单位:包括过程(PROCEDURE)、函数(FUNCTION)、包(PACKAGE),这些是可以被重用的程序单元。 - 事务处理:如COMMIT用于提交当前事务,LOGON用于登录数据库等。 3. Oracle PL/SQL高级应用 - 游标...