oracle pl/sql 程序设计 历史笔记整理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle pl/sql 程序设计 历史笔记整理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6688字,纯文字阅读大概需要10分钟。
内容图文
![oracle pl/sql 程序设计 历史笔记整理](/upload/InfoBanner/zyjiaocheng/485/c3a73432ac8e449786d7ef6e35fcef48.jpg)
create
or
replace
procedure t_p(l_in in
out
number)
is
begin
l_in := 5;
end;
@Test
public void test() throws SQLException
{
DataSource ds = DataSourceGen.getDataSourceFromXML();
Connection conn = ds.getConnection();
int inValue = 0;
CallableStatement cs = conn.prepareCall("{call t_p(?)}");//注意有大括号
cs.setInt(1, inValue);//设置传入的值 下标从1开始
cs.registerOutParameter(1, Types.INTEGER);//注册传出的值
cs.executeUpdate();//执行
int outValue = cs.getInt(1);//获取输出
System.out.println(inValue);//输出0
System.out.println(outValue);//输出5
conn.close();
}
- 在java中调用fucntion
create
or
replace
function t_f(l_in in
out
number)
return
number
is
l_c number;
begin
l_in := 5;
l_c := 2;
return l_c;
end;
@Test
public void test() throws SQLException
{
DataSource ds = DataSourceGen.getDataSourceFromXML();
Connection conn = ds.getConnection();
int inValue = 0;
CallableStatement cs = conn.prepareCall("{? = call t_f(?)}");
cs.setInt(2, inValue);//设置传入的值
cs.registerOutParameter(1, Types.INTEGER);//注册传出的值-通过return返回值
cs.registerOutParameter(2, Types.INTEGER);//注册传出的值-通过参数返回值
cs.executeUpdate();
int outValue1 = cs.getInt(1);
int outValue2 = cs.getInt(2);
System.out.println(inValue);//输出0
System.out.println(outValue1);//输出2
System.out.println(outValue2);//输出5
conn.close();
}
也可以通过select t_f(1) from dual;调用,但是具有out参数的函数不可以通过sql调用。
oracle pl/sql 程序设计 第3章 语言基础
- 在plsql中调用存储过程:
begin t_p(); end;
调用函数:
declare a number;begin a := t_f();end; - 变量,异常,模块的作用范围都是在声明他们的块内。
create or replace package scope_demo is
g_globle number;
procedure set_globle(number_in in number);
end scope_demo;
create or replace package body scope_demo is
procedure set_globle(number_in in number) is
l_count pls_integer;
l_name varchar2(10) := ‘北京‘;
begin
<<localscope>>--标签 为匿名块命名
declare
l_use char(1) := ‘1‘;
begin
select count(1)
into set_globle.l_count
from pub_organ o
where o.organ_name like set_globle.l_name || ‘%‘
and o.in_use = localscope.l_use;
dbms_output.put_line(set_globle.l_count);
end localscope;
scope_demo.g_globle := set_globle.number_in;
end set_globle;
end scope_demo;
begin
scope_demo.set_globle(2);
dbms_output.put_line(scope_demo.g_globle);
end;
- 嵌套程序,完全在生命单元内声明的局部程序。
declare
procedure local_precedure is
begin
dbms_output.put_line(‘dd‘);
end local_precedure;
begin
for i in 1..10
loop
local_precedure();
end loop;
end;
- 在sql中,空字符串和null是一样的,不管是对varchar还是char。但是在plsql中,空字符串在varchar中是和null一样的,但是在char中不是。如:
declare
l_c char(1);
begin
l_c := ‘‘;
if (l_c is null) then
dbms_output.put_line(1);
elsif (l_c = ‘ ‘) then
dbms_output.put_line(2);--输出2 因为自动填满了 而在sql中不会自动填满
end if;
end;
oracle pl/sql 程序设计 第4章 条件和顺序控制
- plsql对and的多个条件之间采用短路控制,后面的条件可能不会被执行。所以不应该将逻辑放在and中处理。
- 规律:if elsif when后面肯定要跟上then。
- case语句以end结束将作为一个表达式存在,以end case结束将作为一条语句存在。
- case语句中的每个when条件如果满足,那么之后的when将不会再被执行。相当于加了个break。
- if中使用in和like
declare
l_n number := ‘10‘;
begin
if(l_n in (‘10‘,‘20‘))
then dbms_output.put_line(‘in‘);
end if;
if(l_n like ‘10%‘)
then dbms_output.put_line(‘like‘);
end if;
end;
20131018 周五
oracle pl/sql 程序设计 第5章 用循环进行迭代处理
- 简单循环
declare
l_c pls_integer;
begin
l_c := 0;
loop
--exit when l_c > 10;
if (l_c > 10) then
exit;
end if;
dbms_output.put_line(l_c);
l_c := l_c + 1;
end loop;
end;
- while循环
declare
l_c pls_integer;
begin
l_c := 0;
while l_c <= 10 loop —while的条件可以加括号 也可以不加
dbms_output.put_line(l_c);
l_c := l_c + 1;
end loop;
end;
- for循环
只有数值型for循环和游标型(可以是游标,也可以直接是sql查询)for循环,这两种循环都要有in字句。遍历的变量不用声明,系统会自动生成。
begin
for l_c in 0 .. 10 loop –不能加括号
dbms_output.put_line(l_c);
end loop;
end;
begin
for l_organ in (select * from pub_organ o where o.organ_name like ‘北京%‘) loop –查询必须用括号括起来
dbms_output.put_line(l_organ.organ_name);
end loop;
end ;
- 嵌套循环 以及从内层直接跳出
declare
i pls_integer := 0;
j pls_integer := 0;
begin
<<outerloop>>
loop
dbms_output.put_line(i);
exit when i > 10;
j := 0;
<<innerloop>>
loop
dbms_output.put_line(‘ ‘ || j);
exit when j > 10;
exit outerloop when(j = 5 and i = 5);
j := j + 1;
end loop innerloop;
i := i + 1;
end loop outerloop;
end;
- oracle11g开始才支持continue。
oracle pl/sql 程序设计 第6章 异常处理
- 异常出现后,如果没有被捕捉,将会自动抛出到上层。
- 遇到未处理的异常(一直到顶层都没有被捕捉),系统会自动加上rollback。
使用下面的处理 将会忽略异常 不会滚也不会报错 继续执行下面的语句
exception
when others then
null;
3、
create
or
replace
procedure t_pp as
l_n number;
begin
update pub_organ o set o.organ_name = ‘dddd444ddd‘ where o.organ_id = ‘O50649821‘;
l_n := ‘ddd‘;--此处出错 本层未捕捉 自动抛出异常到上层
end;
begin
t_pp();--此处会捕捉到下层抛出的异常
exception
when others then
rollback;--回滚
commit;
end;
- 什么时候抛出异常 什么时候捕捉?
如果存储过程是为了其他程序来调用的,并非直接面向前台按钮触发的操作。那么可以将异常抛出到上层来处理。如果是直接面向前台按钮触发的操作,那么需要将异常限制在本层处理掉,不要抛出到应用层去。可以返回成功失败信息,失败原因等错误信息。 - 未绑定异常号的异常:
这种异常根据变量来定位异常,定义的两个异常变量将是两个异常。
declare
l_ex1 exception;
l_ex2 exception;
begin
begin
raise l_ex1;
end;
exception
when l_ex2
then dbms_output.put_line(‘l_ex1‘);
end;
- 绑定异常号的异常,将根据异常号来捕捉异常。
declare
l_ex1 exception;
l_ex2 exception;
pragma exception_init(l_ex1,-20111);
pragma exception_init(l_ex2,-20111);
begin
begin
raise l_ex1;
end;
exception
when l_ex2
then dbms_output.put_line(‘l_ex1‘);--此处将成功打印
end;
- no_data_found
no_data_found的异常号是-1403,但是作为一个特殊情况,将一个自定义的异常关联到-1403不能捕捉到no_data_found,必须关联到100.
declare
l_organ_id varchar2(32);
l_organ_name varchar2(500);
begin
l_organ_id := ‘222‘;
select o.organ_name into l_organ_name from pub_organ o where o.organ_id = l_organ_id;
end;
declare
l_organ_id varchar2(32);
l_organ_name varchar2(500);
err_no_organ_1403 exception;
pragma exception_init(err_no_organ_1403, -1403);
begin
l_organ_id := ‘222‘;
select o.organ_name
into l_organ_name
from pub_organ o
where o.organ_id = l_organ_id<spa 本文系统来源:http://www.cnblogs.com/xiaolang8762400/p/7078687.html
内容总结
以上是互联网集市为您收集整理的oracle pl/sql 程序设计 历史笔记整理全部内容,希望文章能够帮你解决oracle pl/sql 程序设计 历史笔记整理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。