- 浏览: 298058 次
- 性别:
- 来自: 杭州
博客专栏
-
Java面试
浏览量:0
文章分类
- 全部博客 (133)
- Struts2 (4)
- Hibernate (2)
- Spring (3)
- Java常识小积累 (18)
- Linux (6)
- Oscache (1)
- 面试技巧 (2)
- Eclipse (4)
- JavaScript (21)
- 生活 (7)
- Mysql (3)
- 网络优秀文章 (1)
- Freemaker (1)
- Tcp和UDP (1)
- ubuntu -java (1)
- Oracle (14)
- 重构 (1)
- webservice (4)
- Lucene (1)
- UML与OOA/D (1)
- 软件杂谈 (2)
- Nosql(Redis) (1)
- 团队开发 (1)
- Oracle 设计 (1)
- velocity (1)
- 面试那些事儿 (1)
- 技术 (1)
- 互联网 (1)
- 数据库 (1)
- jquery (1)
- java (2)
- fastjson (1)
- Remoting (1)
- 算法 (1)
- 学习技巧 (1)
- POI (3)
- FusionCharts (1)
- 学习资源 (1)
- 设计模式 (2)
- CSS (1)
- 技术边缘 (3)
- 生活感想 (0)
- JVM (1)
- JSON (0)
- 前端 (1)
- cxf (1)
- 分布式 (1)
- 阿萨德飞 (0)
- Java面试中的知识 (2)
- redis (1)
- 开发工具使用 (3)
最新评论
-
liushimiao0104:
请问下怎么删除word里面的图片呢
POI向word添加图片,表格 -
chpn:
addBatch确实可以1.这个和复合索引没得毛关系2.in查 ...
mysql 超1亿数据,优化分页查询 -
步青龙:
dagf113225 写道请问,这个mysql执行SQL的花费 ...
mysql 超1亿数据,优化分页查询 -
dagf113225:
请问,这个mysql执行SQL的花费的时间的工具叫什么?谢谢! ...
mysql 超1亿数据,优化分页查询 -
步青龙:
white_crucifix 写道我怎么觉得builder模式 ...
Builder设计模式
1 过程,函数,触发器 用PL/sql编写,这些都是在Oracle中
PL/sql是很强大的过程化语言,可以被Java调用
提升应用程序的性能:
如果用传统的操作数据库java 程序发送sql,数据库编译
,编译的过程要消耗时间,而过程,函数不必经过编译这一过程
1 优化sql 2 还不行就用过程,函数
缺点:
移植性不好
存储过程:
添加普通过程
create procedure myprocedure is
begin
insert into emp values(23,'myname'......);
end;/ -- 后面机上/让Oracle去创建
如果有了存储过程的话,要替换这个myprocedure
create or replace procedure myprocedure is begin ...end;
查看错误信息 show errow;
调用过程
第一种exec 过程名[(参数1,参数2....)];
第二种 call 过程名[(参数1,参数2....)];
exec myprocedure;
块: 过程,函数,触发器,包
编写规范
注释
单行注释 --
多行 /*.......*/
符号命名
变量 v_xxx
常量 c_xxx
游标 xxx_cursor
例外 e_xxx (e_error)
块:三部分:定义部分,执行部分,例外部分
declear 定义部分 可选
begin
执行部分
dbms_output.put_line('test');
exception 例外部分 可选
end;
dbms_output 是Oracle提供的包,
set serveroutput off; -- off/on 打开关闭输入
declare
v_ename varchar2(20)
bigin
select ename into v_ename from emp
where empno = &aaa;
dbms_output_put_line('员工名:'||v_ename);
end
执行后会弹出一个输入aaa的框,然后输出。
declare
v_ename varchar2(20);
v_sal number(7,2);
bigin
select ename,sal into v_ename,v_sal from emp
where empno = &aaa;
dbms_output_put_line('员工名:'||v_ename||'薪水'||val);
exception
when no_data_found then
dbms_output_put_line('输入有误');
end
传递参数 myprocedure(name varchar2,sal number) 参数只需要声明什么类型就行了
create procedure myprocedure(newname varchar2,newsal number) is
begin
update emp set sal = newsal where ename = newname;
end;
exec myprocedure('SCOTT',8888)
java 调用过程
CallableStatement cs = conn.propareCall("{call muprocedure(?,?)}");
cs.setString(1,"SMITH");
cs.setInt(2,100000);
cs.execute();
函数
函数是用于返回特定的数据,只返回一个值,在函数头部必须包含return
子句, 函数体内必须包含return语句返回的数据
通过名字得到员工年薪
create function myfun(name varchar2)
return number is
yearnumber number(7.2);
begin
select (sal+comm)*12 into yearsal from emp where ename= name;
return yearsal;
end;
--调用
var income number
call myfun('SCOTT') into:income;
print income
---------------
java调用函数
select mypro('SCOTT') from dual
然后rs.getInt(1);
包
包是用于逻辑上组合过程和函数的,由包规范和包体组成
create package mypackage is
procudure mypro(name varchar2,sal number);
function myfun(name varchar2) return number;
end;
然后创建包体,给把mypackage 实现包体
create [or replace] package body mypackage is
procedure mypro(newname varchar2,newsal number) is
begin
update emp set sal = newsal where ename = newname;
end;
create function myfun(name varchar2)
return number is
yearnumber number(7.2);
begin
select (sal+comm)*12 into yearsal from emp where ename= name;
return yearsal;
end;
end;
调用包的过程或者函数
exec mypackage.mypro('SCOTT',8989);
触发器
隐含执行的存储过程,必须指定触发事件和触发的操作。
常用触发事件insert,update,delete。
变量类型
1 标量类型 scalar
2 复合类型 composite
3 参照类型 reference
4 lob large object
标量scalar是一种常用的类型
定义常量和变量的语法 identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constant :指定常量,需要指定它的初始值,且其值是不能改变的
datatype :数据类型
not null:指定变量不能为null
:= 给变量或者是常量指定初始值
default 用于指定初始值
expr:指定初始值的PL/sql 表达式,可以为文本值,其他变量,函数等。
标量定义(存放单个变量)
1 定义变长字符串 v_ename varchar2(20)
2 定义一个小数 v_sal number(6,2);
3 定义一个小数并初始化 v_sal number(6,2):=8000
4 定义date v_birth date;
5 定义布尔变量 v_valid boolean not null default false;
输入员工号 显示员工姓名 工资 个人所得税(税率0.03)
declare
c_tax_rate number(3,2):=0.03
v_ename varchar2(20);
v_sal number(7,2);
v_tax_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno = &no;
-- 计算所得税
v_tax_sal:= v_sal * c_tax_rate;
-- 输入 省略
end
如果要查的员工名字长度大于20 就会报错,如何办? %type
此时可以该该 v_ename emp.ename%type; 这种类型和表的字段类型一致
这样就不会出溢出问题
declare
c_tax_rate number(3,2):=0.03
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno = &no;
-- 计算所得税
v_tax_sal:= v_sal * c_tax_rate;
-- 输入 省略
end
复合变量 composite(用于存放多个值)
分为pl/sql记录 ,pl/sql表,(嵌套表,varray(动态表))
记录类似于高级语言的结构体(如类似于类)
declare type -- 定义一个名为my_c_t (存放多个数据)
my_c_t is record(name emp.ename%type,salary emp.sal%type,...)
mytest my_c_t
begin
select ename,sal,... into my_c_t from emp where empno = 888;
-- dbms_output_put_line('name:'||mytest.ename);
end;
pl/sql表相当于高级语言的数组,下表可以为负数,如所有的ename
declare type
my_t_t is talbe of emp.ename%type index by binary_integer
test my_t_t
begin
select ename into test(-1) from emp where empno = 888;
-- dbms_output_put_line('name:'||test(-1));-- 放在哪个位置就再哪个位置取出
end;
但是如果select如果返回多行呢? 报错了! 如何办? 用参照变量
参照变量 游标变量(ref cursor用的最多)和对象类型变量(ref obj cursor)
定义游标变量的时候不指定select,打开的时候需要指定
输入部门号,显示该部门的员工名和工资
1
declare type
my_s_t is ref cursor ;
beign end;
2
declare type
my_s_t is ref cursor ;
test my_s_t;
beign end;
3
declare type
my_s_t is ref cursor ;
test my_s_t;
beign
open test for select ename,sal from emp where deptno = &no;
end;
4 这个时候需要定义两个变量
declare type
my_s_t is ref cursor ;
v_ename emp.ename%type;
v_sal emp.sal%type;
test my_s_t;
beign
open test for select ename,sal from emp where deptno = &no;
loop
fetch test into v_enam,v_sal;
dbms_output_put_line('name:'v_name||'sal:'||v_sal);
end loop;
end;
5 指定何时退出
declare type
my_s_t is ref cursor ;
v_ename emp.ename%type;
v_sal emp.sal%type;
test my_s_t;
beign
open test for select ename,sal from emp where deptno = &no;
exit when test%notfound;
loop
fetch test into v_enam,v_sal;
dbms_output_put_line('name:'||v_name||'sal:'||v_sal);
end loop;
end;
发表评论
-
in or exits
2012-10-09 12:39 11451 in 和 exits存在的原因 ... -
把数据导入oracle
2011-12-23 12:22 13941:分析:ebay.sql假设放在E盘下,由于sql文件 ... -
Oracle 问题总结
2011-11-10 17:01 1501今天碰到这样一个问题,手动添加数据到数据库,然后通过程序添加数 ... -
PL/SQL(三)
2011-08-26 09:25 1039数据库SQL的优化有很多的规则,我们并不一定按照这样的规则,因 ... -
PL/SQL(二)
2011-08-26 09:20 1217PLSQL 条件控制语句 if-then ,if - ... -
Oracle(八)权限角色管理
2011-08-25 17:26 1233管理Oracle权限,角色 当新创建 ... -
Oracle(七)约束,索引等
2011-08-25 17:25 1173维护表的完整性 可 ... -
Oracle(六)管理
2011-08-25 17:24 1098数据字典与动态性能视图: 数据字典提供了一 ... -
Oracle(五)
2011-08-25 17:23 1094如果一个用户a不想看到其他用户b某个点以后更新的数据,如 ... -
Oracle(四)事务
2011-08-17 08:58 935Oracle 事务 DML 语句就是数据操作语言,增加 ... -
Oracle(三) SQL 语句
2011-08-16 11:10 1066Oracle 过滤递归查询 select id ... -
Oracle(二)
2011-08-16 11:04 1056Oracle数据类型: ... -
Oracle (一)
2011-08-16 10:33 1441启动Oracle 服务 Oracle开头 Oracle ...
相关推荐
PL/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...
- **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...
PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...
PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...
**标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...
PL/SQL VCS插件是为开发者提供的一种增强工具,它与PL/SQL Developer整合,目的是为了更好地管理和控制Oracle数据库中的SQL脚本和存储过程的版本。这个安装包结合了Version Control System (VCS)的功能,如Visual ...
过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...
PL/SQL Developer是一款高效、便捷的Oracle数据库管理工具,尤其适合DBA和开发人员使用。免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的...
- **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...
PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural Language/Structured Query Language”,它是SQL的扩展,增加了编程元素,使得开发者能够编写存储过程、函数、触发器等数据库应用程序。这篇博客主要...
PL/SQL Developer是一款由Allround Automations公司开发的专门用于Oracle数据库管理的集成开发环境(IDE)。这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl...
PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境,它极大地简化了PL/SQL语言的编写、调试和管理任务。远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程...
《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...
Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...
PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发...
PL/SQL 是一种块结构的语言,组成 PL/SQL 程序的单元是逻辑块,一个 PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分: * 声明部分(Declaration section):包含了变量和常量的数据类型和初始值。...