已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1编写一个存储过程,该过程可以向某表中添加记录1) 创建一个简单的表create table mytest(name varchar2(30),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 isbgin-执行部分delete from mytest where name = zhangsan;end;5)/java程序结果public static void main(String args) int a = 1; try a+; catch(Exception e) /异常处理 -打开输出选项set serveroutput on;-关闭输出选项set serveroutput off; exec sp_pro3(SCOTT,4890); /娱乐测试如何在java程序中调用一个存储过程? 在java中建立一个project程序/演示用例:演示java程序调用oracle的存储过程案例Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 / /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();。游标 A cursor is a name for a specific private SQL area in which information for processing the specific statement is kept I mplicit / explicitCollections (集合) Varray - 数组 Nested table 集合 Associative Arrays (hash table)Records DECLARE TYPE timerec IS RECORD (hours SMALLINT, minutes SMALLINT); 对象类型CREATE TYPE employee_typ AS OBJECT CREATE TYPE BODY employee_typ AS 35 复合类型-pl/sql表 相当于高级语言中的数组.但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制.实例如下 declaretype sp_table_type is table of emp.ename%type index by binary_integer; -下标按整数排序sp_table sp_table_type; -定义一个变量:sp_table ,类型 sp_table_typebeginselect ename into sp_table(-1) from emp where empno=7788;dbms_output.put_line(员工名:| sp_table(-1);end;说明:sp_table_type是pl/sql表类型 emp.ename%type 指定了表的元素的类型和长度 sp_table 为pl/sql表变量 sp_table(0)则表示下标为0的元素6 参照变量-介绍参照变量是指用于存放数值指针的变量.通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor) 和对象类型变量,(ref obj_type)两种参照变量类型参照变量-ref cursor游标变量使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要指定select语句,这样一个游标就与一个select语句结合了。实例如下:请使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资.declare-定义游标类型sp_emp_cursortype sp_emp_cursor is red cursor;-定义一个游标变量test_cursor sp_emp_cursor;-定义变量v_ename emp.emp.ename%type;v_sal emp.sal%type;beginopen test_cursor for select ename,sal from emp where deptno = &no;-循环取出结果集loopFetch test_cursor into v_ename,v_sal;-判断工资高低,决定是否更新-判断退出条件:test_cursor 是否为空exit when test_cursor%notfound;dbms_output.put_line(名字:|v_ename|工资:|v_sal);end loop;end; 基础上,如果某个员工的工资低于200元,就增加100元. pl/sql编写分页过程 分页是任何一个网站(bbs、网上商城、blog)都会使用到的技术,因此学习pl/sql编程开发就一定要掌握该技术.1 无返回值的存储过程案例:现有一张表 book ,表结构如下:字段名字段类型bookIdnumber(5)bookNamevarchar2(100)publishHousevarchar2(100)请编写一个过程,可以向book表添加书,要求通过java程序调用该过程.Create table book(bookId number,bookName varchar2(50),publishiHouse varchar2(50) );编写过程:-in 表示向存储过程输入的一个变量-out 表示向存储过程输出的一个变量Create or replace procedure sp_pro7(spBookId in number,spBookName in varchar2,spPublishHouse in varchar2) isbegininsert nto book values(spBookId,spBookName,spPublishHouse);end/在java中如何调用?主要部分:Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:localhost:1251:ORCL”,”system”,”orcl1232456”); /3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro7(?, ?,?)”);/4给?赋值cs.setInt(1,10);cs.setString(2,”HELLO WORLD”);cs.setString(3,”PEOPLE PUBLISHHOUSE”); /5 执行 cs.execute(); /6 关闭cs.close();conn.close();2 有返回值的存储过程(非列表)案例:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。-有输入和输出的存储过程Create or replace proceduce sp_pro8(spno in number,spName out varchar2) isbeginselect ename into spName from emp where empno = spno;end/在java中如何调用?Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:localhost:1251:ORCL”,”system”,”orcl1232456”); /3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro8(?,?)”);/4给?赋值cs.setInt(1,7788);cs.registerOutParameter(2,oracle,jdbc.OracleType.VARCHAR); /5 执行 cs.execute(); /取回返回值,要注意?的顺序 String name= cs.getString(2);System.out.println(“7788的名字:”|name); /6 关闭cs.close();conn.close();案例扩展:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资、和岗位。Create or replace proceduce sp_pro8(spno in number,spName out varchar2spSal out number,spJob out varchar2) isbeginselect ename,sal,job into spName ,spSal,spJob from emp where empno = spno;end/在java中如何调用?Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:localhost:1251:ORCL”,”system”,”orcl1232456”); /3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro8(?,?,?,?)”);/4给?赋值cs.setInt(1,7788);cs.registerOutParameter(2,oracle,jdbc.OracleType.VARCHAR);cs.registerOutParameter(3,oracle,jdbc.OracleType.DOUBLE);cs.registerOutParameter(4,oracle,jdbc.OracleType.VARCHAR); /5 执行 cs.execute(); /取回返回值,要注意?的顺序 String name= cs.getString(2); String job= cs.getString(4);System.out.println(“7788的名字:”+name+” 工作:”+job); /6 关闭cs.close();conn.close();3 有返回值的存储过程(列表结果集)案例:编写一个过程,输入部门号,返回该部门所有雇员信息。由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage, 步骤如下:建一个包。建立存储过程。如何在java程序中调用-返回结果集的过程-1 创建一个包并定义了一个游标test_cursorcreate or replace package testpackage as type test_cursor is ref cursor;end testpackage;-2创建过程Create or replace procedure sp_pro9(spNo in number,p_cursor out testpackage .test_cursor) isBeginOpen p_cursor for select * from emp where deptno = spNo;end-3 在java中调用Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:localhost:1251:ORCL”,”system”,”orcl1232456”); /3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro9(?,?)”);/4给?赋值cs.setInt(1,2);cs.registerOutParameter(2,oracle,jdbc.OracleType.CURSOR); /5 执行 cs.execute(); /取回返回值,要注意?的顺序 ResultSet rs = (ResultSet)cs.getObject(2);While (rs.next)System.out.println(rs.getInt(1)+” “+rs.getString(2); /6 关闭cs.close();conn.close();作页:编写分页过程要求,请大家编写一个存储过程,要求可以输入表名、每页显示记录数、当前页,排序字段(dept降序)。返回总记录数,总页数,和返回的结果集.-oracle的分页Select t1.*,rownum rn from (Select * from emp) t1;Select t1.*,rownum rn from (Select * from emp) t1 where rownum = 10;Select t1.*,rownum rn from (Select * from emp) t1 where rownum = 10;Select * from (Select t1.*,rownum rn from (Select * from emp) t1 where rownum =6;-开发一个包create or replace package testpackage as type test_cursor is ref cursor;end testpackage;-分页过程create or replace procedure fenye(tableName in varchar2, Pagesize in number, -一页显示的记录数pageNow in number, myrows out number, -总记录数myPageCount out number,-总页数p_cursor out testpackage.test_cursor -返回的记录数)is-定义部分-定义sql语句 字符串v_sql varchar2(1000);-定义两个整数v_begin number :=(pageNow - 1)*Pagesize+1;v_end number :=pageNow*Pagesize;begin-执行部分v_sql := Select * from (Select t1.*,rownum rn from (Select * from | tableName |order by sal) t1 where rownum =|v_begin;-把游标和sql关联open p_cursor for v_sql;-计算myrows 和PageCount-组织一个sqlv_sql := select count(*) from |tableName;-执行sql,并把返回的值,赋给myrowsExecute immediate v_sql into myrows;-计算myPageCount-if myrows%Pagesize = 0 then (x)If mod(myrows,Pagesize) = 0 thenmyPageCount := myrows/Pagesize;elsemyPageCount := myrows/Pagesize+1;end if;-关闭游标-close p_cursor;end;- 在java中调用Try /1 加载驱动 class.forName(“oracle.jdbc.driver.OracleDriver”); /2 连接 Connection ct=DriverManager.getConnection(“jdbc:oracle:thin:localhost:1251:ORCL”,”system”,”orcl1232456”); /3 创建CallableStatement ableStatement cs = ct.prepareCall(“call sp_pro9(?,?,?,?,?,?)”);/4给?赋值Cs.setString(1,”emp”);cs.setInt(2,5);cs.setInt(3,1);/注册总记录数cs.registerOutParameter(4,oracle,jdbc.OracleType.INTEGER);/注册总页数cs.registerOutParameter(5,oracle,jdbc.OracleType.INTEGER);/注册返回的结果集cs.registerOutParameter(6,oracle,jdbc.OracleType.CURSOR); /5 执行cs.execute();/取出总记录数 Int rowNum = cs.getInt(4);Int pageCount = cs.getInt(5); ResultSet rs = (ResultSet)cs.getObject(6);System.out.println(“rowNum”+rowNum);System.out.println(“总页数:”+pageCount);While (rs.next)System.out.println(“编号:”+rs.getInt(1)+”名字:”+rs.getString(2)+”薪水:”+rs.getFloat(6); /6 关闭cs.close();conn.close();-新的需求,要求按照薪水从低到高排序,然后取出610行记录添加:order by saloracle视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成视图与表的区别表需要占用磁盘空间,视图不需要视图不能添加索引使用视图可以简化 复杂查询 比如:学生选课系统视图用利于提高安全性比如:不同用户查看不同视图创建视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 熔喷工岗位合规化技术规程
- 2025学年南京市鼓楼区九年级语文上学期期中考试卷附答案解析
- 电子真空镀膜工工艺作业技术规程
- 轻钢龙骨制作工安全宣传竞赛考核试卷含答案
- 父母去世兄弟俩确权协议书
- 2025年秋北师大版(2022)小学劳动技术一年级上学期期末质量检测卷附答案(共3套)
- 技术方案评审工作指南
- 广西钦州市2024-2025学年高二年级下册期末考试 语文试题(含答案)
- 四年级心理教育实践
- 揭秘地理奥秘
- 冒菜店营销方案
- 2025年新能源汽车行业供应链管理研究报告及未来发展趋势
- 老年人社工培训
- 挂靠安装项目合同协议
- 暖冬无恙健康同行 - 冬季流感预防主题班会课件
- 大学生美学论文范文2500字
- 2025年生态环境执法大练兵比武竞赛理论考试题库(附答案)
- 2025至2030中国创意玩具行业项目调研及市场前景预测评估报告
- 2025贵州贵阳智慧城市运营发展集团有限公司下属子公司招聘10人笔试考试参考试题及答案解析
- 门诊药师聘用合同范本
- 安全生产的重要论述的心得体会
评论
0/150
提交评论