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. Python配置文件实现

    实现目标: 支持配置文件继承 支持本地配置文件 支持配置文件别名 简单的配置文件操作 最新的代码可以参考 https://github.com/blackmatrix7/matrix-toolkit/ ...

  2. 利用pip批量更新python库

    如果python库比较旧,需要更新到最新版本,可以利用pip工具. DOS命令行下,输入pip -V查看pip版本,可以先把pip更新到新版本. 查看系统里过期的python库 pip list #列 ...

  3. 代码审计之XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

  4. ssh远程登录命令简单实例

    ssh远程登录命令简单实例 ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh -h查 ...

  5. MIPI协议-DSI

    对于现代的智能手机来说,其内部要塞入太多各种不同接口的设备,给手机的设计 和元器件选择带来很大的难度.下图是一个智能手机的例子,我们可以看到其内部存储.显示.摄像.声音等内部接口都是各不相同的.即使以 ...

  6. Android 线程_笔记

    多线程 一.为什么要使用多线程 1.提高用户体验或避免ANR 在事件处理代码中需要使用多线程,响应时间超过5s,即会出现ANR(Application is not responding),并因为响应 ...

  7. 并查集-HDU1232-畅通工程

    转的其他人的.不知道谁的. 来看一个实例,杭电1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的.最后要解决的是整幅图的连通性问题.比如随意 ...

  8. 最小生成树&最短路基础算法总结

    [最短路问题] 解决最短路问题有以下算法:Dijkstra算法,Bellman-Ford算法,Floyd算法,和SPFA算法和启发式搜索算法A*; 每个算法都有它的特点可以解决某些特定的问题,例如:F ...

  9. JS 监听浏览器各个标签间的切换

    以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定,这里将介绍一下页面可见性 ...

  10. Kubernetes volumes简介

    容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...