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. Netty之多用户的聊天室(三)

    Netty之多用户的聊天室(三) 一.简单说明 笔者有意将Netty做成一个系列的文章,因为笔者并不是一个善于写文章的人,而且笔者学习很多技术一贯的习惯就是敲代码,很多东西敲着敲着就就熟了,然后再进行 ...

  2. AspNet Core Web 应用程序的启动 当项目中 没有Startup.cs 类如何设置启动 配置等等

    感叹: Core 16年6月1号 在中国宣布上线 到现在已经快经历两年时间了,目前版本已经到了2.0 就目前的前景来看,个人感觉 到2020年才可能有所起色,等到Core更成熟 个人看法:在.net这 ...

  3. WKWebView强大的新特性

    iOS11对WKWebView的功能进一步完善,新增如下功能: Manager Cookies Fileter unwanted content Provide custom resources 下面 ...

  4. Windows下搭建Redis服务器

    Redis服务器是当下比较流行的缓存服务器,Redis通常被人拿来和Memcached进行对比.在我看来,应当是各具优势吧,虽然应用场景基本类似,但总会根据项目的不同来进行不通的选用. 我们今天主要讲 ...

  5. Oracle loop循环无法插入数据

    以下的测试基于scott用户下的emp表 首先用while循环进行测试,向emp表插入999条数据 declare i emp.empno; begin loop insert into emp(em ...

  6. windows 线程

    在windows中进程只是一个容器,用于装载系统资源,它并不执行代码,它是系统资源分配的最小单元,而在进程中执行代码的是线程,线程是轻量级的进程,是代码执行的最小单位. 从系统的内核角度看,进程是一个 ...

  7. 用JAVA写一个冒泡排序

    一:实现思想: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要 ...

  8. 常见的Linux 的命令

    rm命令 -f :就是force的意思,忽略不存在的文件,不会出现警告消息 -i :互动模式,在删除前会询问用户是否操作 -r :递归删除,最常用于目录删除,它是一个非常危险的参数 如: rm -i ...

  9. IdentityServer Topics(4)- 登录

    为了使IdentityServer代表用户发布令牌,该用户必须登录到IdentityServer. Cookie认证 使用来自ASP.NET Core的cookie身份验证处理程序管理的cookie跟 ...

  10. Centos搭建Docker环境

    安装Docker 安装Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum install d ...