PLSQL:Procedural Language SQL

(1)

plsql的基本结构(a)

declare

  id constant number(2):=2;--常量定义
  name varchar2(10);--变量定义
  mysal emp.sal%type;--引用emp表sal列的类型
  myrow emp%type; --引用emp表行类型,相当于java中对象,该行类型包含所有列
  no_data exception;--异常定义
  cursor c1 is select sal from emp;--游标定义,该c1中相当于java中集合,给
  cursor c2(dno number) is select sal from emp where deptno=dno;---带参游标定义,该c2相当于java中带泛型集合
  no_data exception;
begin
  raise no_data;
exception
  when no_data then xx;
  when others then xx;
end;

创建存储过程语法(b):

create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

AS

begin

PLSQL子程序体;

End;

或者

create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)]

is

begin

PLSQL子程序体;

End  过程名;

(2)循环语句
第1种
  for i in 1..100
  loop
  end loop;
第2种
  while
  loop
  end loop;
第3种
  loop
    fetch c1 into xx;
    exit when xx
  end loop;
(3)条件判断语句
if xx then
   elsif xx then xx
   elsif xx then xx
  else xx
end if;

(4)存储过程
第1种:不带参数
create or replace procedure mypro1 as
  --这里可以声明变量
begin
end;
第2种:带参数
create or replace procedure mypro2(eno in emp.empno%type,name out varchar2) as
  --这里可以声明变量
  myrow emp%rowtype;
begin
  select * into myrow from emp where empno=eno;
  name:=myrow.ename;
end;
  调用
  execute mypro1;
declare
  name varchar2;
begin
  mypro2(7369,name);
end;
(5)存储函数
create or replace function myfn1(eno in emp.empno%type) as
  return varchar2;
  --这里可以声明变量
  myrow emp%rowtype;
begin
  select * into myrow from emp where empno=eno;
  name:=myrow.ename;
  return name;
end;
  调用:
  execute myfn1(7369);
declare
  name varchar2;
begin
  name:=mypro2(7369);
end;
(6)java api 调用存储过程和存储函数
DriverManager.getConncetion()---Connection---prepareCall
CallableStatement---set in 参数直接通过设置类型setInt()---registerOutParameter--
call.execute();

CallableStatement调用存储过程和存储函数的sql语句
{call mypro1(?,?)}
{?=call myfn1(?)}

jdbc:oracle:thin:@ip/数据库
jdbc:mysql://ip/数据库
(7)包头和包体
create or replace package mypackage as
type mycursor is ref cursor;--自定义游标类型
procedure mypro(eno in number,o out mycursor);
--声明存储过程,可以在变量后面加上自定义的游标类型
end mypackage;

create or replace package body mypackage as
procedure myro(eno in number,o out mycursor)
as
begin
open mycursor for select * from emp where empno=eno;
end mypro;
end mypackage;
(7)触发器
create or replace trigger 触发器名
  before|after
  delete|update|insert
on 表名
  for each row--行级触发器
 begin
 end;
  raise_application_error(-2999,'') 系统定义错误

oracle04_plsql的更多相关文章

随机推荐

  1. CSS3 黑白图片

    每当有自然灾害的时候,很多网站都是灰白的,想知道是怎么实现的嘛? 1.IE私有滤镜的方式 自IE4开始,IE引入了私有滤镜,可以实现透明度.模糊.阴影.发光等效果,当然也可以实现灰度图像效果.代码如下 ...

  2. Mac下安装ant(利用brew)

    安装ant最简单的方法就是通过brew.步骤如下:1. 安装brew(如果已经安装可以跳过这步). ruby -e "$(curl -fsSL https://raw.github.com/ ...

  3. kindeditor 上传下载文件

    jsp代码 1 <script type="text/javascript" src="${pageContext.request.contextPath}/kin ...

  4. 3.If statements

    if 语句   电脑程序不只是执行命令.时常会需要做出选择.例如基于一个条件的选择.Python有这样几种条件运算:   >   greater than <   smaller than ...

  5. SP3精密星历简介

    IGS精密星历采用sp3格式,其存储方式为ASCII文本文件,内容包括表头信息以及文件体,文件体中每隔15 min给出1个卫星的位置,有时还给出卫星的速度.它的特点就是提供卫星精确的轨道位置.采样率为 ...

  6. Redis随笔(二)redis desktop manager 安装并且连接redis服务器

    1.首先在win10下安装redis desktop manager 2.查看虚拟机防火墙状态,启动状态,则关闭掉 查看防火墙状态: systemctl status firewalld.servic ...

  7. AOP及spring AOP的使用

    介绍 AOP是一种概念(思想),并没有设定具体语言的实现. AOP是对oop的一种补充,不是取而代之. 具体思想:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流. 特征 散布于应 ...

  8. 七牛php-sdk使用-文件上传

    使用七牛进行文件上传可以有多种方式: 直接form表单上传,需要自己按照文档做配置 使用七牛jssdk,部署较简单,大文件分片上传 php-sdk后台上传 首先,所有的上传方法以及所有的跟七牛接口相关 ...

  9. 大数据Hadoop学习之搭建hadoop平台(2.2)

    关于大数据,一看就懂,一懂就懵. 一.概述 本文介绍如何搭建hadoop分布式集群环境,前面文章已经介绍了如何搭建hadoop单机环境和伪分布式环境,如需要,请参看:大数据Hadoop学习之搭建had ...

  10. BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主

    4219: 跑得比谁都快 3007: 拯救小云公主 三角剖分的解释可以看这里:http://www.cnblogs.com/Enceladus/p/6706444.html 后一道是前一道的弱化版. ...