oracle PL、SQL(基础知识点二)

 --1,参数   in:表示输入类型,可以省略 ;out:输出类型不能省略----------

 ----案例1:编写一个过程,可以输入雇员的编号,返回该雇员的姓名。
create or replace procedure proc_getEnameByEmpno( v_empno in number,v_ename out varchar2 )
is
begin
--根据输入的编号查找出名字赋值给输出的变量
select ename into v_ename from emp where empno=v_empno;
end;
/
----调用形式------打印输出----前提: set serveroutput on---------
declare
vename varchar2(30);
begin
proc_getEnameByEmpno(9903,vename);
dbms_output.put_line(vename);
end; ----案例2:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗位。-----------
create or replace procedure proc_getEnameByEmpno( v_empno in number,v_ename out varchar2,v_job out varchar2 )
is
begin
select ename,job into v_ename,v_job from emp where empno=v_empno;
end;
/ ----调用形式---------------------
declare
v_ename varchar2(30);
v_job varchar2(30);
begin
proc_getEnameByEmpno(9903,v_ename,v_job);
dbms_output.put_line('姓名:'||v_ename|| ' 岗位 :'||v_job);
end; ----案例2的。。。。JAVA程序调用--------------------------
/*
try {
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn=DriverManager.getConnection(url, "scott", "tiger"); CallableStatement cs=conn.prepareCall("{call proc_getEnameByEmpno(?,?,?)}"); //调用存储过程 cs.setInt(1, 9903);//将第一个参数赋值
//注册操作
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);//将第二个参数注册为ORACLE的varchar 说明是一个out类型的数据
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR);//将第三个参数注册为ORACLE的varchar 说明是一个out类型的数据 cs.execute();//执行存储过程
String ename=cs.getString(2);//取出第二个参数的值
String job=cs.getString(3);//取出第三个参数的值
System.out.println("姓名:"+ename+" , 岗位:"+job); cs.close();
conn.close();
} catch (Exception e) {
}
*/ --2,创建视图-view-------------------------------------------- --2.1、as 用法 : 用在三个地方:视图 、栏目别名 、 包 ------------
/*
create view view_emp
as
select empno,ename,sal from emp;
-------------------------------------------------------------
select ename as 姓名 , sal as 工资 from emp;
*/ --2.2、包:package --游标:cursor------------------------- create or replace package package_emp ---创建包
as
type emp_cursor is ref cursor; ---定义游标
end package_emp; ----案例3:------------------------------
create or replace procedure proc_getResut(v_deptno in number ,v_cursor out package_emp.emp_cursor )
is
begin
open v_cursor for --打开游标,将结果放进去
select * from emp where deptno=v_deptno;
end;
/
/* ------Java 调用包---------------------
try {
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn=DriverManager.getConnection(url, "scott", "tiger"); //调用存储过程
CallableStatement cs=conn.prepareCall("{call proc_getResut(?,?)}"); cs.setInt(1, 30);//将第一个参数赋值
//注册操作
//将第二个参数注册为ORACLE的varchar 说明是一个out类型的数据
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();//执行存储过程
//getObject() 取游标所对应的结果集
ResultSet rs=(ResultSet) cs.getObject(2);
while (rs.next()) {
System.out.println(
" 姓名:"+rs.getString("ename")+
" 工资:"+rs.getDouble("sal")+
" 部门号:"+rs.getInt("deptno"));
}
cs.close();
conn.close();
} catch (Exception e) {
}
*/ --3,分页------ 行号 :rownum------------------------ ----案例4:在员工表信息后面加上行号
select e.* , rownum as num from emp e; ----案例5:将 加了行号的结果 看成新的表----查询9至12行的数据
select * from (select e.* ,rownum as num from emp e) where num between 9 and 12 ----案例6:
------(1)建立包 和游标 用来指向结果集
create or replace package pagesPackage
as
type pages_cursor is ref cursor;
end pagesPackage; ------(2.1)建立存储过程
create or replace procedure fenye(
tablename in varchar2,---表名
pagesize in number,-----每页条数
pageNow in number,-----当前页
totalNum out number,----总条数
totalPage out number,-----总页数
result_cursor out pagesPackage.pages_cursor ---查询结果游标
)
is
v_sql varchar2(500);---拼装SQL语句
v_begin number:=(pageNow-1)*pagesize+1;---开始的位置
v_end number:=pageNow*pagesize;---结束的位置
begin
v_sql:='select * from
(select t.*,rownum as num from
(select * from '|| tablename ||') t)
where num between'||v_begin||' and '||v_end;
open result_cursor for v_sql;---将查询的结果存入游标中
v_sql:='select count(*) from '||tablename;---查询总条数的SQL语句
execute immediate v_sql into totalNum;--立即执行 将结果赋值给 toalNum 的到总条数
if mod(totalNum,pagesize)=0 then
totalPage:=totalNum/pagesize;
else
totalPage:=totalNum/pagesize+1;
end if;
end;
/ ----案例7:按照员工编号降序的方式 找到30号部门中 第4到第6条的数据
select * from (select t.*,rownum as num from (select * from emp where deptno=30 order by empno desc) t) where num between 4 and 6 ; ---(2.2) 建立存储过程 增加 where 和 order by 条件
create or replace procedure fenye(
tablename in varchar2,---表名
pagesize in number,-----每页条数
pageNow in number,-----当前页
wheres in varchar2,---查询条件
orderby in varchar2,---排序
totalNum out number,----总条数
totalPage out number,-----总页数
result_cursor out pagesPackage.pages_cursor ---查询结果游标
)
is
v_sql varchar2(500);---拼装SQL语句
v_begin number:=(pageNow-1)*pagesize+1;---开始的位置
v_end number:=pageNow*pagesize;---结束的位置
v_where varchar2(30):='';
v_orderby varchar2(30):='';
begin
if wheres is not null then
v_where:=' where ' ||wheres;
end if; if orderby is not null then
v_orderby:=' order by '||orderby;
end if;
v_sql:='select * from (select t.*,rownum as num from (select * from '||tablename||' '||v_where||' '||v_orderby ||') t) where num between '||v_begin||' and '||v_end;
open result_cursor for v_sql;---将查询的结果存入游标中
v_sql:='select count(*) from '||tablename||v_where ;---查询总条数的SQL语句
execute immediate v_sql into totalNum;--立即执行 将结果赋值给 toalNum 的到总条数
if mod(totalNum,pagesize)=0 then
totalPage:=totalNum/pagesize;
else
totalPage:=totalNum/pagesize+1;
end if;
end;
/
/*
try {
Class.forName("oracle.jdbc.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn=DriverManager.getConnection(url, "scott", "tiger");
CallableStatement cs=conn.prepareCall("{call fenye(?,?,?,?,?,?,?,?)}"); //调用存储过程
cs.setString(1, "emp");//填入表名
cs.setInt(2, 3);//每页4条
cs.setInt(3, 2);//第三页
cs.setString(4, " deptno=30 ");//where 条件
cs.setString(5, " sal desc ");//排序
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.INTEGER); // 注册 输出总条数
cs.registerOutParameter(7, oracle.jdbc.OracleTypes.INTEGER); //注册 输出总页数
cs.registerOutParameter(8, oracle.jdbc.OracleTypes.CURSOR); //注册 输出结果集
cs.execute();//执行存储过程
System.out.println("总条数:"+cs.getInt(6));
System.out.println("总数页:"+cs.getInt(7));
System.out.println("打印第"+2+"页的数据");
ResultSet rs=(ResultSet) cs.getObject(8); //getObject() 取游标所对应的结果集
while (rs.next()) {
System.out.println( "姓名: "+rs.getString("ename")+" 工资:"+rs.getDouble("sal")+" 部门号:"+rs.getInt("deptno"));
}
cs.close();
conn.close();
} catch (Exception e) {
}
*/

oracle PL、SQL(二)的更多相关文章

  1. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日 ...

  2. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  3. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  4. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

  5. [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

    原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ...

  6. [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

    原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...

  7. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...

  8. [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

    原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...

  9. ORACLE PL/SQL编程详解(转)

    原帖地址:http://blog.csdn.net/chenjinping123/article/details/8737604 ORACLE PL/SQL编程详解 SQL语言只是访问.操作数据库的语 ...

  10. Oracle PL/SQL入门之慨述

    Oracle PL/SQL入门之慨述 一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言( ...

随机推荐

  1. 20170301 Excel 导出函数XXL_SIMPLE_API

    * XMPLT_V-COL_NO = . * XMPLT_V-COL_NAME = '物料号码'. * APPEND XMPLT_V. * * XMPLT_V-COL_NO = . * XMPLT_V ...

  2. react native 之页面布局

     第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...

  3. PLSQL 安装说明

    PLSQL安装说明. 1.安装oracle 11g ,2030端口设置防火墙例外.2.PLSQL Developer 9.0.0.1601是绿色版,复制到本地即可.3.PLSQL->Tools- ...

  4. Java经典算法大全

    1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...

  5. I.MX6 新版u-boot分析

    /******************************************************************* * I.MX6 新版u-boot分析 * 说明: * 因为一些 ...

  6. BZOJ_5311_贞鱼_决策单调性+带权二分

    BZOJ_5311_贞鱼_决策单调性+带权二分 Description 众所周知,贞鱼是一种高智商水生动物.不过他们到了陆地上智商会减半. 这不?他们遇到了大麻烦! n只贞鱼到陆地上乘车,现在有k辆汽 ...

  7. 初识NDA

    领导要签署保密协议,全是英文,叫我来翻译一下,这样便接触到了NDA,翻译过程中遇到不少问题,既然接触到了,还是多查查资料了解一下,以备以后的不时之需. NDA 全称 Non Disclosure Ag ...

  8. jsp实现文件上传(一)用jspSmartUpload组件实现文件上传

    java类(ImageUtil.java) import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ...

  9. View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App

    Using View Controllers in Your App Whether you are working with view controllers provided by iOS, or ...

  10. 如何用GO实现一个tail -f功能以及相应的思维发散

    此文已由作者杨望暑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 背景 在服务端查看log会经常使用到tail -f命令实时跟踪文件变化. 那么问题来了, 如果自己写一个同样 ...