Oracle_10g_plsql实战笔记

上传人:漫步人****me 文档编号:61664659 上传时间:2018-12-09 格式:DOC 页数:26 大小:138.50KB
返回 下载 相关 举报
Oracle_10g_plsql实战笔记_第1页
第1页 / 共26页
Oracle_10g_plsql实战笔记_第2页
第2页 / 共26页
Oracle_10g_plsql实战笔记_第3页
第3页 / 共26页
Oracle_10g_plsql实战笔记_第4页
第4页 / 共26页
Oracle_10g_plsql实战笔记_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Oracle_10g_plsql实战笔记》由会员分享,可在线阅读,更多相关《Oracle_10g_plsql实战笔记(26页珍藏版)》请在金锄头文库上搜索。

1、Oracle 10g pl/sql实战笔记pl/sql是什么:pl/sql (procedural language /sql ) 是oracle在标准sql语言上的扩展,pl/sql 不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误注意:1) 过程,函数,触发器是PL/SQL编写2) 过程,函数,触发器是在oracle中3) pl/sql 是非常强大的数据库过程语言4) 过程,函数可以在java程序中调用1编写一个存储过程,该过程可以向某表中添加记录1) 创建一个简单的表create table mytest(name varchar2(3

2、0),passwd varchar2(30);2)创建过程:create or replace procedure sp_pro1 isbgin3)执行部分insert into mytest values(zhangsan,zhangsan);4) 结束end;5)/如何查看错误: show error;如何调用过程:1)exec 过程名(参数值1,参数值2) -调用一次就插入一条记录2)call 过程名(参数值1,参数值2)select * from mytest;-查看结果2编写一个存储过程,该过程可以删除表记录create or replace procedure sp_pro2 is

3、bgin-执行部分delete from mytest where name = zhangsan;end;5)/pl/sql 可以做什么?1)简单分类 |-过程(存储过程)|-函数块(编程)-|-触发器|-包2)编写规范注释单行注释 -多行注释 /*.*/来划分标识符号的命名规范1)当定义变量时,建议用v_作为前缀 v_sal2)当定义常量时,建议用c_作为前缀 c_rate3)当定义游标时,建议用 _cursor作为后缀 emp_cursor;4)当定义例外时,建议用 e_作为前缀 e_error3)块(block)是pl/sql的基本程序单元 编写pl/sql程序实际上就是编写pl/sq

4、l块。要完成相对简单的应用功能,可能只需要编写一个pl/sql块;但是如果要想实现复杂的功能,可能需要在一个pl/sql块中嵌套其它的pl/sql块.pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分.如下所示:declear/*定义部分-定义常量、变量、游标、例外、复杂数据类型*/begin/*执行部分-要执行的pl/sql语句和sql语句*/exception/*例外处理部分-处理运行的各种错误*/end;注意:定义部分是从declare开始的,该部分是可选的。执行部分是从begin开始的,该部分是必须的。例外处理部分是从exception开始的,该部分是可选的java程序结果

5、public static void main(String args) int a = 1; try a+; catch(Exception e) /异常处理 -打开输出选项set serveroutput on;-关闭输出选项set serveroutput off; -最简单的块begin dbms_output.put_line(hello world);end;注意:dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output包的一个过程-有定义和执行部分的块-显示用户的薪水declare -定义v_ename

6、varchar2(10);v_sal number(7,2); begin -执行部分select ename,sal into v_ename ,v_sal from emp where empno = &no; -select ename into v_ename from emp where empno = &no;dbms_output.put_line(用户名:|v_ename|薪水:|v_sal);-异常处理exceptionwhen no_data_found thendbms_output.put_line(no_data_found: reput again !);end;/

7、注意:设置set serveroutput on;select * from emp; -查看结果注意:如果输入了不存在的雇员号,应当做例外处理. oralce事先预定义了一些例外,no_data_found 就是找不到数据的例外.4)过程过程用于执行特定的操作.当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境.在sqlplus中可以使用create procedure 命令来建立过程。编写一个过程,可以输入雇员名,新工资 可修改雇员的工资create or repl

8、ace procedure sp_pro3(spName varchar2,newSal number) isbegin-执行部分,根据用户名去修改工资update emp set sal = newSal where ename = spName;end;/exec sp_pro3(SCOTT,4890); /娱乐测试如何在java程序中调用一个存储过程? 在java中建立一个project程序/演示用例:演示java程序调用oracle的存储过程案例Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 / /

9、3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro3(?,?)”);/4给?赋值cs.setString(1,”SMITH”);cs.setInt(2,1005); /5 执行 cs.execute(); /6 关闭cs.close();conn.close();5) 函数 函数用于返回特定的数据,当建立函数时,在函数头部必须包含return 子句,而在函数体内必须包含return语句返回的数据。我们可以使用 create function 来建立函数 ,实际案例:create function annual

10、_incomec(name varchar2)return number isannual_salary number(7,2);beginselect sal*12+nvl(comm,0) into annual_salary from emp where ename=name;return annual_salary;end;/在sqlplus 中调用函数sqlvar income number -定义一个变量income,类型numbersqlcall annual_incomec(SCOTT) into:income;sqlprint income在java 程序中调用该函数selec

11、t annual_income(SCOTT) from dual;/这样可以通过rs.getInt(1)得到返回的结果6) 包包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。 们可以使用create package 命令来创建包:实例:-创建包 sp_package-声明该包有一个过程和一个函数create or replace package sp_package isprocedure update_sal(name varchar2,newsal number);function annual_income(name varchar2) return number;end;包的

12、规范只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体用于实现包规范中的过程和函数,建立包体可以使用create package body 命令-实现包体create or replace package body sp_package isprocedure update_sal(name varchar2,newsal number)isbegin update emp set sal=newsal where ename=name;end;function annual_income(name varchar2)return number isannual_salary num

13、ber;beginselect sal*12+nvl(comm,0) into annual_salary from emp where ename=name; return annual_salary;end;end;-执行exec sp_package.update_sal(“SCOTT”,1900);7)触发器简单介绍触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件包括insert,update,delete语句,而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。在编写pl/sql程序时,可以定义变量和

14、常量;在pl/sql程序中包括有:标量类型(scalar)复合类型(composite)参照类型(reference)lob(large object)标量定义的案例定义一个变长字符串v_enamevarchar2(10);定义一个小数 范围 -9999.999999.99v_salnumber(6,2);定义一个小数并给一个初始植为5.4 :=是pl/sql的赋值号v_sal2number(6,2):=5.4定义一个日期类型的数据 v_hiredatedate;定义一个布尔变量,不能为空,初始植为falsev_validboolean not null default false;1 标量(scalar)-使用标量在定义好变量后,就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其它的编程语言,需要在等号前加冒号(:=)以输入员工号,显示雇员姓名、工资、个人所得

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号