zoukankan      html  css  js  c++  java
  • oracle 学习笔记(三)

      在oracle数据库中,有一个概念:表空间。表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中,从逻辑上讲,数据库是存放在表空间中,表空间是由一个或多个数据文件组成。逻辑结构包括表空间、段、 区、 块,那么为什么要将数据库分的这么细呢,我想主要是为了提高数据库效率,至于是为什么,各位自己考虑吧!

      通过建立表空间有以下好处
       一:控制数据库占用的磁盘空间(好像最大是500M);
         二:dba可以将不同数据类型部署到不同的位置,这样有利于提高I/O性能,同时利于备份和恢复等管理操作;

      当然,一个用户不是想建表空间就建立表空间的,他必须拥有create tablespace 的权限,否则不能建立表空间。据了解,一个优秀的DBA在建立好数据库后,会立刻建立表空间的,以便于管理。而我现在只是一个程序员,没有考虑到这方面,但了解一点很好。命令行如下

      create tablespace 表空间名 datafile 'd:\sp001.dbf'(路径名) size(大小) 5m uniform size(最小区域大小) 128k;

      如果你希望将建立的表放在某个表空间下面,那么只需要这样 create table 表名(....字段名 tablespace 表空间名) 即可。

      

    alter tablespace 表空间名 offline --表空间脱机,这样别人不能访问数据库
    alter tablespace 表空间名 online --表空间联机
    alter tablespace 表空间名 read only --设置表空间只读
    alter tablespace 表空间名 read write --设置表空间可读可写

      那么接下来,就是一些很很重要的知识了,个人理解!

      块:前面讲过,是数据库逻辑结构中的一种,那什么是块呢??引用别人的话:

      数据块概述Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块(data block)。数据块是数据库中最小的(逻辑)数据单位。与数据块对应的,所有数据在操作系统级的最小物理存储单位是字节(byte)。每种操作系统都有一个被称为块容量(block size)的参数。Oracle每次获取数据时,总是访问整个数(Oracle)数据块,而不是按照操作系统块的容量访问数据。原文链接:http://soft.chinabyte.com/database/56/12199056.shtml

      在oracle 中,我们常用它来定义一个块,作为所有的编程语言,输出 hello.world 是第一课,在oracle也可,命令如下

    begin   --表示开始执行
    dbms_output.put_line('hello,world!'); --执行的代码
    end; --结束执行

     如果你没有看见 hello,world!,那么有可能是你的输出器关闭了,命令语句是  set serveroutput on 。

    下面的例子是定义了一个块,从scott用户中读取数据,代码如下

    declare 
    v_ename varchar2(5); --定义了两个变量 用来传送两个值
    v_sal number(7,2);
    begin
    select ename,sal into v_ename,v_sal from emp where empno=&empno; --这里表示用户输入的的 员工编号
    dbms_output.put_line('用户名是:'|| v_ename|| '薪水是:' || v_sal);
    end;

      大致一看没什么问题 ,其实这个块是很有问题的,比如 用户输入的员工号的数位大小不同,定义的变量的类型与表中的数据类型不同,这都是一些问题。那么请看下面一段语句

    declare
    v_ename emp.ename%type;
    v_sal emp.sal%type;
    begin
    select ename,sal into v_ename,v_sal from emp where empno=&empno;
    dbms_output.put_line(v_ename ||'薪水是:' || v_sal);
    exception --如果有异常
    when no_data_found --当没有数据找到时
    then dbms_output.put_line('error');
    end;

      从这个命令,我没有明确定义变量 v_ename,v_sal的类型,而是用了%type 这个很有意义,这样让两个值的类型一样。其次,我定义了异常的处理,当no_data_found 即没有数据时,则执行下面语句。关于异常,我会在后面具体讲讲几种异常。

      函数:用于返回特定的数据,当建立函数时,在函数头部必须包含return字句,而在函数体内必须包含return语句返回的数据,必须要有关键字 function代表我们创建的是一个函数。比如我们写一个函数,或得一个用户的年薪。当然,个例子只返回了一个值,且用户名师唯一的,语句如下。  

    create function sp_fun1(spName varchar2) --定义了函数名和函数所带的参数
    return number is yearSal number(7,2);  
    --定义了返回值的类型是number 并且返回值的名称是 yearSal 这里两个值的类型并然是一样的 
    begin
    select sal*12 into yearSal from emp where ename=spName;
    return yearSal;
    end;

    如何调用这个函数呢??

    var yearSal number; --定义一个变量,接受返回值
    call sp_fun1('SCOTT') into:yearSal; --调用存储过程
    Method called

    yearSal
    ---------
    36000 ---返回结果

      恩 这些知识今天我就总结到这里了!

        

     

      

  • 相关阅读:
    自动化测试-19-测试报告分离
    自动化测试-18-测试用例目录整合
    自动化测试-17-测试框架改进-浏览器Driver分离
    自动化测试-16-测试框架改进-数据分离openpyxl读取excel数据
    自动化测试-15-测试框架改进-yml文件介绍
    自动化测试-14-测试框架改进 --ini文件读取
    自动化测试-13- 自动化测试框架开发
    自动化测试-12-PO-PageObject原理
    自动化测试-11-pycharm中windows找不到chrome解决办法
    自动化测试-10-Python 文件操作中的读写模式:open(path, '-模式-',encoding='UTF-8')
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/2373215.html
Copyright © 2011-2022 走看看