• oracle04_plsql


    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,'') 系统定义错误

    有的内容是自己平日积累的与工作上遇到的,有的是摘抄其他博主的精彩好文(会附上作者),愿大家共同成长。
  • 相关阅读:
    斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
    [cocos2d-x]屏幕自适应解决的方法
    【机器学习实验】学习Python来分类现实世界的数据
    按花生酱,赞不绝口——敏捷12准则的敏捷解释
    linux命令笔记之ls
    HTML5 Canvas动画效果实现原理
    互联网+时代的人生必修课—逆商
    WebService的相关使用
    将一个链表中的结点依照奇偶分成两个链表
    web开发性能优化---用户体验篇
  • 原文地址:https://www.cnblogs.com/PinkPink/p/7600735.html
Copyright © 2020-2023  润新知