zoukankan      html  css  js  c++  java
  • 数据库之Oracle(二)

     

    上文中对于oracle数据库做了一些介绍,本文中将主要着重介绍在数据库开发中运用到的知识,比如字符串的格式转换,还有存储过程的书写,高级连接等

    一:存储过程

        存储过程是为了更加方便,有效的去执行复杂的sql语句。

        存储过程的格式:

        示例:输出hello world

        Create or replace procedure  name Is               --->创建存储过程,存在就替换

        begin                                                                       --->开始执行

        Execute immediate                              --->立即执行(对表做操作时必须要有这条语句)

        DBMS_output.put_line(‘Hello  World’);                    --->输出‘hello world’

        End;                                                                        --->结尾

        目前我在工作中用存储过程的主要作用是为了存放 创表还有查询,添加数据语句

        存在存储过程和java 代码一样,我们习惯于去创建一个package包保存,创建包

        示例:

        Create or replace package Packagename As

        Begin

          Class :=’二年级’;                                             --->公共变量(可以在下面的存储过程中使用)

          School:=’中南小学’;                                         --->公共变量

          Procedure name1;                                         --->Package Body中的存储过程 name1

          Procedure name2;                                         --->Package Body中的存储过程 name2

        End Packagename ;

        上问中的包内有两个存储过程,这两个存储过程实际是存放在包底下的body里面,创建好包以后,需要创建它的Body

        示例:

        Create or replace Package Body bodyname AS                          --->创建body

        Begin                                                                                    --->开始

        Create or replace Procedure name1 as                                      --->存放存储过程

        Begin

        Create table table1 (name  varchar2(20),age   number);

        End name1 ;

        Procedure name2 ..........

        End bodyname;                                                                    ---->body 结束

    二:在上篇中介绍了函数,那么实际开发中对于数据的处理,往往需要多个函数一起使用

    示例:

    Sql语句

    显示+10000/-10000

    To_char(nvl(num,0),’$09999’)

    需要将数字输出

    lpad(nvl(user_id,0),12,0) 这里需要使用从左补充0,否则取值会有问题

    对于日期格式的取值

    Nvl2(date,To_char(date,’yyyymmdd’),’19931111’) 利用nvl2函数去判断非空

    未完待续......

        当我们在对数据做处理的时候,需要从各个不同的表中取到相应的数据,这时候就有了高级连接。

    三:高级连接

        开发中往往需要从不止一张表中获取数据,那么都有哪些方法可以获取到这些数据呢?

        下面让我来一一为大家介绍,数据库中各种表之间的联系。

        表与表之间的连接通常分为内联和外联还有全联。

      内联:inner join on

    示例:

    会显示bugrecord和bug表中bug_name相等的数据所有信息

    Sql语句

    select * from bugrecord inner join bug onbug.BUG_NAME=bugrecord.bug_name

      外联(左联和右联)

        在多表进行连接时,我们会有主表和从表的区别。

          左连接  Left join on

    示例:

    会将左边主表(bugrecord)中的数据全部显示,右边从表(bug)的数据只有和主表bug_name匹配的才会显示

    Sql语句

    select * from bugrecord left join bug on bug.BUG_NAME=bugrecord.bug_name 

          右连接  Right join on

    示例:

    会将右边主表(bug)中的数据全部显示,左边从表(bugrecord)的数据只有和主表bug_name匹配的才会显示

    Sql语句

    select * from bugrecord right join bug on bug.BUG_NAME=bugrecord.bug_name 

      Union 与Union ALL的区别

        Union ALL

    示例:

    Union ALL 使用时,表中的数据结构必须相同,会将关联表中所有的信息都显示出来

    Sql语句

    select * from bugrecord union all select * from project 

        Union

    示例:

    Union 使用时,表中的数据结构必须相同,会将关联表中所有的信息都显示出来,会自动去掉重复的信息

    Sql语句

    select * from bugrecord union select * from project 

     

        在开发中如果遇到A表中的一个字段需要在B表中去对照获取最终值,这种情况推荐使用临时表来处理,使用临时表的效率更加高效,在数据量大的情况下效率很重要。

        With  t_lise as lise

        (select a.bugId as t_id,

          B.tranformvalue  as t_value

         From (select bugId from A)  a left join B b on a.bugid=b.codevalue

        )

         Select p.describe ||list.t_value  from project p Left join lise on lise.t_id=p.bugId

      这种写法很很大程度上会优化sql的效率,使用起来十分的便利。今后将会有一段时间从事oracle数据库的开发工作,后续会补充在工作中遇到的难点,以及各种优化的语句,也期望大家可以在下面留言,有更好的优化或者本文提到的不对的地方一一指出。

        始终坚信------但行好事,莫问前程!

  • 相关阅读:
    JavaWeb servlet过滤器
    JavaWeb--jsp九大内置对象完整总结
    response.getWriter()和jsp中的out对象的区别
    JavaWeb基础(jsp初识)
    Oracle 存储过程的基本语法 及注意事项
    PLSQL编程基础 :分支、循环语句
    oracle数据库的高级查询方法 多表联合查询
    oracle中 SQL语句 经典练习题
    git 拉取远程分支报错(fatal: '' is not a commit and a branch '' cannot be created from it)
    根据端口号查询进程并杀掉被占用的进程
  • 原文地址:https://www.cnblogs.com/warnerY/p/6809730.html
Copyright © 2011-2022 走看看