zoukankan      html  css  js  c++  java
  • 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,'') 系统定义错误

    有的内容是自己平日积累的与工作上遇到的,有的是摘抄其他博主的精彩好文(会附上作者),愿大家共同成长。
  • 相关阅读:
    ​特征工程系列:特征预处理(上)
    特征工程系列:特征预处理(下)
    工具使用介绍
    Android图片处理
    Tomcat报java.lang.OutOfMemoryError: Java heap space错误停止运行如何解决
    JBOSS.71.1.Final安装配置
    android:windowSoftInputMode属性详解
    IOS入门之Swift语言(一)
    Android仿微信拍摄短视频
    Android实现播放视频
  • 原文地址:https://www.cnblogs.com/PinkPink/p/7600735.html
Copyright © 2011-2022 走看看