`
步青龙
  • 浏览: 298058 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

PL/SQL(一)

 
阅读更多
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;








分享到:
评论

相关推荐

    一个对数据库的操作工具PL/SQLpl/sqL工具

    PL/SQL是Oracle公司开发的一种过程化语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,专门用于处理Oracle数据库系统。这个“PL/SQL工具”显然是一个用于辅助管理和操作Oracle数据库...

    pl/sql最新中文手册

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种过程化语言,专为数据库操作设计。这个"PL/SQL最新中文手册"显然是一份详细解释PL/SQL 7.0版本的指南,对于学习和精通Oracle数据库编程至关重要。以下是手册...

    oracle10g_pl/sql

    - **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    pl/sql developer11.0

    PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库开发工具,专为编写、调试、测试和管理PL/SQL代码而设计。标题中的“pl/sql developer11.0”指的是该软件的第11个主要版本。在本文中,我们...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计特性,是Oracle数据库系统中用于创建存储过程、函数、触发器和包的主要工具。在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入...

    pl/sql64位

    PL/SQL是Oracle数据库系统中的一个关键组件,全称为Procedural Language/Structured Query Language,是一种结合了SQL和过程编程语言的工具,主要用于编写数据库应用程序。64位的PL/SQL开发者工具对于那些处理大数据...

    oracle 9i pl/sql程序设计笔记

    **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。 **关键词**:Oracle 9i、PL/SQL #### PL/SQL程序结构详解 **2.1...

    PL/SQL VCS插件安装包+PL/SQL

    PL/SQL VCS插件是为开发者提供的一种增强工具,它与PL/SQL Developer整合,目的是为了更好地管理和控制Oracle数据库中的SQL脚本和存储过程的版本。这个安装包结合了Version Control System (VCS)的功能,如Visual ...

    ORACLE PL/SQL从入门到精通

    过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...

    oracle pl/sql从入门到精通 配套源代码

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...

    pl/sql 免安装,绿色版pl/sql

    PL/SQL Developer是一款高效、便捷的Oracle数据库管理工具,尤其适合DBA和开发人员使用。免安装的绿色版PL/SQL Developer使得用户无需经历复杂的安装过程,只需解压即可使用,大大简化了软件部署,方便在不同的...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL查询的基础上添加控制流语句、变量定义、错误处理等特性。 - **环境搭建与配置**:...

    PL/SQL 基本知识

    PL/SQL是Oracle数据库系统中的一个核心组件,全称为“Procedural Language/Structured Query Language”,它是SQL的扩展,增加了编程元素,使得开发者能够编写存储过程、函数、触发器等数据库应用程序。这篇博客主要...

    pl/sql快捷插件

    PL/SQL Developer是一款由Allround Automations公司开发的专门用于Oracle数据库管理的集成开发环境(IDE)。这款软件为Oracle数据库管理员、开发人员和测试人员提供了便捷的SQL和PL/SQL编写、调试和执行功能。而“pl...

    PL/SQL Developer 远程连接Oracle数据库

    PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境,它极大地简化了PL/SQL语言的编写、调试和管理任务。远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程...

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《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实例编程(PL/SQL经典书籍)

    Oracle PL/SQL是一种强大的编程语言,它将数据库管理和应用程序逻辑紧密结合起来,是Oracle数据库系统中的核心组件之一。这本书“Oracle PL/SQL实例编程”显然旨在深入讲解如何利用PL/SQL进行实际开发工作,通过实例...

    PL/SQL下载

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...

    PL/SQL编程基础知识

    PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库的核心组成部分之一,PL/SQL在数据库应用程序开发...

    PL/SQL doc 文件

    PL/SQL 是一种块结构的语言,组成 PL/SQL 程序的单元是逻辑块,一个 PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分: * 声明部分(Declaration section):包含了变量和常量的数据类型和初始值。...

Global site tag (gtag.js) - Google Analytics