数据库之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数据库的开发工作,后续会补充在工作中遇到的难点,以及各种优化的语句,也期望大家可以在下面留言,有更好的优化或者本文提到的不对的地方一一指出。

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

时间: 2024-10-11 07:17:05

数据库之Oracle(二)的相关文章

MySQL/Oracle数据库的基础(二)

MySQL/Oracle数据库 Oracle数据库管理系统是管理数据库访问的计算机软件,由Oracle数据库与Oracle实例构成 Oracle数据库:一个相关的操作系统文件集合,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库.Oracle数据库必须要与内存实例合作,才能对外提供数据管理服务. Oracle实例:位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被进程锁访问. Oracle用它们来管理数据库访问 Oracle实例就是平常所

数据库之Oracle

数据库之Oracle 一. 用户的管理 1. 用户就是好比公司的某个人,而权限是这个人能在公司做什么,他的角色就是说明他的职位. 2. 用户的权限分为: 系统权限:对别的用户的管理操作. 对象权限:对保存的数据的管理操作. 3. 对用户的增删改查 增:例如我创建一个用户名为”atongmu“密码为“123”的用户:create user c##atongmu identified by 123; 删:不能自己删除自己,需要dba权限才可以,这样有了之后,删除用户:drop user  c##at

初识 数据库及Oracle数据库

一.数据库基本概念二.数据库举例三.Oracle特点四.Oracle版本五.安装Oracle注意事项六.SQL简介七.Select语句 一.数据库基本概念 数据库(Database,DB)数据库管理系统(Database Management System,DBMS)数据库管理员(Database Administrator,DBA)数据库系统(Database System) 二.数据库举例 Oracle(Oracle) DB2(IBM) SQL/Server(MS) SyBase(SyBas

Oracle数据库之Oracle的下载与安装

二.Oracle 的下载与安装 2.1.Oracle 简介 Oracle 公司是全球最大的信息管理软件及服务供应商,成立于 1977 年,主要的业务是推动电子商务平台的搭建.Oracle 公司有自己的服务器.数据库.开发工具.编程语言,在行业软件上还有企业资源计划(ERP)软件.客户关系管理(CRM)软件.人力资源管理软件(HCM)等大型管理系统,所以 Oracle 是一家综合性的国际大公司,也是最有实力与微软公司在技术上一较高低的公司之一. Oracle 公司的创办决定于4位传奇人物(左起):

Linux平台上SQLite数据库教程(二)——C语言API介绍

Linux平台上SQLite数据库教程(二)--C语言API介绍 前言:本文将介绍几个基本的SQLite3数据库的C语言API接口,主要用到两个文件:sqlite3.c.sqlite3.h.源码地址:https://github.com/AnSwErYWJ/SQLite. 打开数据库 1.原型: int sqlite3_open( const char* filename, /* 数据库文件名, 必须为 UTF-8 格式 */ sqlite3** ppDB /* 输出: SQLite 数据库句柄

【数据库】Oracle 11g使用命令导入导出表,导出结果集

[数据库]Oracle 11g使用命令导入导出表,导出结果集 很久没敲命令进行Oracle数据库表的导入(imp),导出(exp)了,今天猛一敲,发现有些命令居然忘了,顺手写下这篇博文,记录一下! exp本地导出命令: 1 exp username/[email protected] file=d:\demo.dmpfull=y 2 exp username/[email protected] file=d:\demo.dmpowner=(xx) 3 exp username/[email pr

数据库基本操作(二)--数据查询

//数据查询 create database JXGL; //创建数据库 use JXGL;//使用数据库 create table S( Sno char(10) not null unique, Sname char(20) not null unique, Ssex char(2), Sage int, Sdept char(20)); create table C( Cno char(2) not  null primary key (Cno), Cname char(20), Teac

oracle监听,数据库,oracle服务器的启动和停用

一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器,然后使用数据库管理员用户去启用和停用相关服务. 1.启动oracle监听:使用root用户登录后,使用命令:lsnrctl start   //启动监听 2.启动数据库:使用数据库管理员dba用户(sqlplus '/as sysdba')去启动和关闭数据库. 连接数据库:connect  /as

数据库使用-oracle索引的创建和分类

数据库使用-oracle索引的创建和分类 索引是数据库中一种可选的数据结构,她通常与表或簇相关.用户可以在表的一列或数列上建立索引,以提高在此表上执行 SQL 语句的性能.就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引提供了更为迅速地访问表数据的方式.正确地使用索引能够显著的减少磁盘 I/O. Oracle 提供了多种类型的索引,可以互为补充地提升查询性能: ·        平衡树索引(B-tree index) ·        平衡树簇索引(B-tree clust