zoukankan      html  css  js  c++  java
  • PLSQL编程基础

     

    数据类型:

     Charvarchar2数据类型:

     相同点:都是作为字符类型

     不同点:char是定长的varchar2是变长的

         Char 最大为2000字节 varchar232767

    注意: 如果定义char类型为char(10),但是只传入了7位数据,剩下的则会用空格补全。

     *如果出现直等情况,可能造成数据关联失败的情况。建议使用varhcar2定义字符类型。

    NUMBER类型:

     Number(5,2) 表示共5位长,小数点前3位小数点后2

     Number(4,-3)表示共4位长,-3 表示从后往前截取,判断千分位是否进位,如:5680 number(4,-3) 结果为6000

    LONGLONG RAW

     LONG用于存储变长的字符串,最大长度为2GB ,由于容量上的优势多用来存储文本,字符数组以及各种文档,可以使用DML语句操作LONG列进行增删改查等。但是不能再表达式,函数以及wheregroup by 等特定语句中引用LONG类型的数据。

    LONG RAW 用于存储原始的二进制变量数据,最大值为2GB,这样的数据需要Oracle的包来读取并转化为二进制数据,然后存储,并使用相反的方法来读取,不能使用DML语句来直接查询或者进行其他操作。

    BOOLEAN类型:

    Boolean用于存储true false null

     True表示真值 false 表示价值 null 表示未知,并且sql没有数据类型与boolean对应

     但是Boolean的值可以通过if或者case 语句完成转化

    CREATE OR REPLACE PROCEDURE boolean_type (b BOOLEAN)

    IS 

    BEGIN

      CASE

        WHEN b IS NULL THEN

          dbms_output.put_line('is null');

        WHEN b THEN

          dbms_output.put_line('is true');

        WHEN NOT b THEN

          dbms_output.put_line('is flase');

    END;

    PLS_INTEGER数据类型:

    PLS_INTEGER类型和BINARY_INTEGE是相同的,给类型是带符号的整数数据类型,有效范围(-2147483648~2147483648),相比于NUMBER数据类型PLS_INTEGER直接使用硬件存储和计算。但是使用PLS_INTEGER存在溢出问题解决办法可以使用INTEGER

    SIMPLE_INTEGERPLS_INTEGER的子类型,具有非空约束的优势,如果指定了NULL值,则系统会报错,如果对整数数据类型需要非空约束,建议使用SIMPLE_INTEGER减少判断,并且SIMPLE_INTEGER定义时必须赋初始值,因为非空。

    DATETIMESTAMP

    日期类型,timestampdate类型更加准确些。

    DECLARE

    date_type DATE;

    timestamp_type TIMESTAMP;

    BEGIN

      SELECT SYSDATE INTO date_type FROM dual;

      dbms_output.put_line('DATE类型--'||date_type);

      SELECT SYSDATE INTO timestamp_type FROM dual;

      dbms_output.put_line('TIMESTAMP类型--'||timestamp_type);

    END;

    结果:

    DATE类型--22-1月 -17

    TIMESTAMP类型--22-1月 -17 02.12.04.000000 下午

    ARCHORED类型:

    Archored类型基于底层的数据库对象,定义之后会随着底层数据库的数据类型改变而改变,用户不必修改程序就可以适应底层数据类型的改变。

    语法格式:变量名  对象类型属性%TYPE;

    如:var_name变量名  emp(对象名).name(属性名)%TYPE;

    自定义数据类型:

     自定义数据类型分为无约束和有约束。

    无约束: subtype 子类型名称 is 基类型  

    无约束自定义子类型与基类型有相同的取值范围,实际上相当于基类型的别名

     subtype  mynumber is number;

     var1 mynumber(3,2);

    有约束的:

     在无约束相同的语法中可以使用精度,范围,或者约束来定义用户子类型

    :subtype mynumber is number(3,2)

      如果使用此类型定义4000.22 则报错!

    PLSQL保留字:

      DECLAREBEGINENDEXCEPTION

    变量:

    声明的变量可以赋初始值,指定非空约束,也可以使用默认值,或者定义为常量,常量不会再变化并且在声明时赋值。pai constant number := 3.14

    变量的有效范围,内部局部,和全局

    如:DECLARE

    vars VARCHAR2(10) := 'var_out';

    BEGIN

     DECLARE

       vars VARCHAR2(10) := 'var_in';

       BEGIN 

         dbms_output.put_line('in:='||vars);

       END;

     dbms_output.put_line('out:='||vars);

    END;

    结果:

    in:=var_in  out:=var_out

    变量还可以使用select first_name_type into first_name from emp

    序列号:

    Oracle使用序列生成器自动生成用户可以再事务中使用的唯一序列号,该序列号是一个整数类型,主要用于在多用户下产生唯一的数字序列,但是不会造成额外的磁盘I/O或者事务锁。理解为数据库的一个对象,该对象产生唯一序列,能够避免多用户相互等待而造成的事务串执行,序列号的使用提高了系统的事务处理能力,减少了多用户并行操作的等待时间。

    创建一个序列:

    Create sequence sequence_name start with 100 increment by 1;

    创建一个序列sequence_name 100开始每次自增1

    当每次调用序列号的nextval 序列号都增加1

    事务:

    Commit  rollback  savepoint

    Commit提交

    Rollback回滚

    Savepoint 保存点

    commit事务提交永久存储,rollback 未提交回滚到原始

    Savepoint 断点

    例:

    事务1

      Savepoint1

    事务2

      Savepoint2

    事务3

      Savepoint3

    Rollback savepoint1

    End;  执行结束,结果是回到savepoint1的事务结果。

  • 相关阅读:
    616无趣
    安装elasticsearch的问题
    导出PDF数据
    生活本苦,奈何年华
    分享一个sql查询重复记录
    springboot的java打印票据-4
    springboot的java打印票据-3
    springboot的java打印票据-2
    react 学习笔记
    原生可拖动表格
  • 原文地址:https://www.cnblogs.com/sun-chao/p/6343618.html
Copyright © 2011-2022 走看看