• Oracle——基础知识(一)


       一、Oracle中的数据类型

    1、字符串类型。如:char、nchar、varchar2、nvarchar2。
    2、数值类型。如:int、number(p,s)、integer、smallint。
    3、日期类型。如:date、interval、timestamp。

    4、其他。RAW-用来存储操作系统使用的原始二进制数据,可用于存储像图像或声音记录这样的信息,但这种数据长度最长度只有255字节.LONG RAW-与LONG类型等价,但存储二进制数据,最长可达2GB个字节.

    5、PL/SQL类型。如:pls_integer、binary_integer、binary_double(10g)、binary_float(10g)、boolean。plsql类型是不能在sql环境中使用的,比如建表时。
    6、自定义类型。利用 TYPE 定义;一个type 就像是复合变量: 个人理解这个type 就是一个数组一样,不过他返回值只有一个值。而且需要赋值

    select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual   //显示:08-11-07 13:22:42

    select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //显示:2005-12-25 13:25:59

    而如果把上式写作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为小时hh是12进制,13为非法输入,不能匹配。

    二、PL/SQL语句块

    是一个块结构,划分为:声明部分、  执行部分、  异常处理部分三部分。如下

    Declare
    声明部分;    --位于 Declare 和 Begin 之间
    变量声明;
    常量声明;
    游标声明;
    Begin
    执行部分    --位于 Begin 和 Exception 之间;无 Exception 时,位于 Begin 和  End 之间
    Exception
    异常执行部分  --位于 Exception 和 End 之间
    End ;  --必须加分号

    1、声明变量:

       变量名 [CONSTANT] 变量类型 [[NOT NULL] :=|DEFAULT expression];  //与SqlServer不同,变量名前无需@

    注:

    • CONSTANT:常量;
    • NOT NULL:约束条件,若有,则初始化必须赋值;
    • := 赋值符号;直接赋上默认值。

      例: 

    declare
    a varchar2(20):='12';
    sqltable varchar(200);
    sqlText varchar(1000);

     2、执行部分

    用于逻辑运算和查询等,常用语句:Dbms_output.put_line('1');  --类似于SqlServer中的 print。

    3、异常处理

    Exception
      when 异常错误名称1 [ or 异常错误名称2 ] then
        语句段1
      when 异常错误名称3 [ or 异常错误名称4 ] then
        语句段2
      ……
      when others then
        语句段3
    End;

    4、PL/SQL 嵌套块

     只要是允许执行语句的地方,就可以使用嵌套语句; 嵌套块也被当作一个语句; 标识符可见的范围;

    例如:

    declare
      v_para varchar2(20) := 'china';
    begin
      dbms_output.put_line(v_para);    --外面的块无法看见里面块的变量
      --dbms_output.put_line(v_para_2);  --该语句无法执行,因为无法获取嵌套块中的变量
      declare
        v_para_2 varchar2(20) := 'java';
      begin
        dbms_output.put_line(v_para);
        dbms_output.put_line(v_para_2);
      end;
    end;

    三、基本操作

    1、复杂类型变量 TABLE 和 RECORD

    • TABLE(数组)

    类型声明格式:TYPE 新类型的名称 IS TABLE OF 具体的类型 INDEX BY BINARY_INTEGER;

    变量声明格式: 变量名 新类型的名称;

    例:

    declare
    type mytable_table_type is table of number index by binary_integer; 声明一个新类型:mytable_table_type
    para_table mytable_table_type;  --用新类型创建一个变量
    begin
      para_table(0) := 100;
      para_table(-8) := 200;
      para_table(10) := 300;
      dbms_output.put_line(para_table(-8));
    end;

    和 C# 数组的区别:

    • 不需要指定长度.
    • 下标可以为负数.

    命名规则:

    • 定义PLSQL表类型时,用_table_type作为后缀
    • 定义PLSQL表类型的变量时,用_table为后缀
    • RECORD(类)

    类型声明格式:

    TYPE type_name IS RECORD
    (
      field_name1 field_type,
      field_name2 field_type,
      ……
    );

    变量声明格式:变量名 新类型的名称;

    示例:

    declare
    type myrecord_record_type is record   --创建新类型
    (
      first_name varchar2(10),
      last_name varchar2(20),
      salary number(6)
    );
    para_record myrecord_record_type;  --定义变量
    begin
      para_record.first_name := 'a';
      para_record.last_name := 'b';
      para_record.salary := 100;
      dbms_output.put_line(para_record.first_name||' '||para_record.last_name||' '||para_record.salary);
    end;

    命名规则:
    1、定义Record类型时,用_RECORD_TYPE作为后缀
    2、定义Record类型的变量时,用_RECORD为后缀

    2、 %TYPE 属性 :获取变量类型

    获取已经存在的 变量、数据库中的表的字段 用以定义新的变量。

    格式: 变量名 已存在的变量/表中字段%TYPE ;   --定义一个与 已存在的变量/表中字段 相同类型的变量

    即新声明的变量的类型是 % 前的已存在的变量/表中字段 的类型;

    例:

    declare
      v_para1 number;
      v_para2 person.name%type;  --person为一个存在的表,name为该表的字段
      v_para3 v_para1%type;  --利用已存在的变量确定新变量的类型。
    begin
      v_para2 := 'china';
      v_para3 := 1000;
      dbms_output.put_line('v_para2的值:'||v_para2||' v_para3的值:'||v_para3);
    end;

    3、%ROWTYPE

    与%TYPE作用类似; 变量类型将定义为由数据库的表的字段集合构成的RECORD类型;%ROWTYPE的前缀是数据库的表名;RECORD中的域,与表的字段的名称和数据类型完全相同

    格式: 变量名 表名%rowtype;   --定义一个包含表中一条记录中各个字段类型的 RECORD(数组)类型 的变量

    例:

    declare

      v_para person%rowtype;

    begin

      select * into v_para from person  where id = 2;

      dbms_output.put_line(v_para.id||'   '||v_para.name);

    end;

     4、if 语句

    IF … THEN
      语句1;
    elsif…then
      语句2;
    elsif…then
      语句3;
    else
      语句4;
    end if;

           注:是 elsif 而不是 elseif ;

    5、loop 语句

    loop
      ……
      exit when bool;//当为真时退出循环
      ……
    end loop;

    6、while语句

    while bool loop
    ……
    End loop;

    7、查看字段类型

    select * From all_tab_columns where table_name=upper('表名');

    8、is与as

    在 存储过程 和 函数 中没有区别;在 视图 中只能用 AS 不能用 IS ;在 游标 中只能用 IS 不能用 AS 。 从其定义也可以看出没什么区别。

    create [or replace] procedure procedure_name
     [(parameter_name [in | out | in out] type [,........])]
      {is | as}
    begin
       procedure_body
    end procedure_name;

     

     

     

  • 相关阅读:
    开发中几个时期该写的
    Java API Docs
    Cogs 1709. [SPOJ705]不同的子串 后缀数组
    Poj 3683-Priest John's Busiest Day 2-sat,拓扑排序
    Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划
    Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
    Bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路 最短路,floyd
    Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
    Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
    Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
  • 原文地址:https://www.cnblogs.com/SunBlog/p/4019789.html
Copyright © 2020-2023  润新知