zoukankan      html  css  js  c++  java
  • Oracle_day04

    oracle第四天总结
    (1)plsql
        1.基本结构:
            declare
              --声明变量
            begin
              --plsql体执行其他操作
            exception  --有异常捕获处理可以加上该关键字
              --异常处理
            end;

    declare
      i number(3) := 1;
    begin
      loop
        dbms_output.put_line(i);
        i := i + 1;
        exit when i > 100;
      end loop;
    end;


        2.变量声明:(常量、普通变量、引用普通类型变量、引用行类型变量、异常类型变量、游标类型变量)
      

    DECLARE
      id constant number(2) := 1; --使用constant 关键词定义常量
      name  VARCHAR2(10) := '圣元'; --定义指定类型变量
      mysal emp.sal%type; --定义引用存在表的列类型
      myrow emp%rowtype; --定义引用存在表行类型  bean   select * into v_account from xx
      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中带泛型集合
    BEGIN
      raise no_data;
    exception
      -- when no_data then
      -- dbms_output.put_line('没有数据');
      when others then
        dbms_output.put_line('出错了');
        --常量就不能再赋值了 id:=2 错误
        SELECT sal INTO mysal FROM emp WHERE empno = 7369;
        SELECT * INTO myrow FROM emp WHERE empno = 7369;
        dbms_output.put_line(id);
        dbms_output.put_line(name);
        dbms_output.put_line(mysal);
        dbms_output.put_line(myrow.ename || '   ' || myrow.sal);
    END;


        3.plsql中条件语句
            select case when then when then else end
            select decode()
            ---------------------------------
            if xx then
            elsif  xx then  xx
            elsif xx then xx
            else xx
            end if;---注意加上分号
        4.plsql中循环语句
            第1种
                for  i in 1..100   --退出循环的是根据循环次数来定的
                loop
                end loop;
                游标使用for in格式更简单
                for 不需要定义的任意变量名称 in c1;
                loop
                end loop;
            第2种:
                while  --此处while后面声明退出循环条件
                loop
                end loop;
            第3种:
                open c1;           ---此处打开游标
                loop
                fetch c1 into xx;
                exit when c1%notfound;      --此处exit when 声明退出循环条件
                end loop;
                close c1;          --此处关闭游标
        
    (2)存储函数:function
        创建存储函数:
            create or replace function myfn1(eno in emp.empno%type) return varchar2 as---实际return name 的name类型一定要和定义得return varchar2要一致
              --这里可以声明变量
              myrow emp%rowtype;
              name varchar2;
            begin
                select * into myrow from emp where empno=eno;
                name:=myrow.ename;
                return name;
            end;
        plsql调用存储函数:
            select myfn1(7369) from dual;
            或者
            declare
              name varchar2;--此处要声明一个变量用于接收返回的结果
            begin
              name:=mypro2(7369);
              dbms_output.put_line(ename);
            end;        
    (3)存储过程:
        第1种创建方式:不带参数
            create or replace procedure mypro1 as
              --这里可以声明变量
            begin
            end;
        第2种创建方式:带in和out参数,参数个数不限制
            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;
        plsql调用存储过程:
            execute mypro1;---对于无参数存储过程可以这样调用
            或者
            call mypro1(xxx)--对于只有in 参数可以这样调用
            或者
            declare         --存储函数和存储过程都可以这样调用
              name varchar2;
            begin
              mypro2(7369,name);---此处声明一个变量用于接收out参数输出
            end;
    (4)jdk api调用存储函数和存储过程:
        oracle和mysql连接数据库写法区别:
            jdbc:oracle:thin:@ip:port/数据库
            jdbc:mysql://ip:port/数据库
        对象模型:
            DriverManager.getConncetion()---Connection---prepareCall
            CallableStatement---set in 参数直接通过设置类型setInt()---registerOutParameter--
            call.execute();
        
        CallableStatement调用存储过程和存储函数的sql语句
        {call mypro1(?,?)}  调用存储过程
        {?=call myfn1(?)}   调用存储函数
        
        SQL>@D:1.sql     --oracle执行sql语句和mysql 中source d:1.sql 差不多

    (4)触发器
       create or replace trigger 触发器名
       before|after
       delete|update|insert
       on 表名
       for each row--行级触发器
       begin
       end;
       raise_application_error(-2999,'') 系统定义错误

  • 相关阅读:
    template(name="remote" type="string" string="%msg%")
    legacy 发送和接收格式
    保存退出vi编辑以及CentOS 系统安装配置步骤详解
    Templates 模板:
    [Err] 1449
    select2如何设置默认空值
    select2切换事件如何生效
    Basic Structure 基本结构:
    FineBI与FineReport对比
    geoip设置
  • 原文地址:https://www.cnblogs.com/datapool/p/6943876.html
Copyright © 2011-2022 走看看