zoukankan      html  css  js  c++  java
  • plpgsql系列教程-变量声明与数据类型

    声明变量
     
    声明变量的语法为:name [ CONSTANT ] type [ COLLATE collation_name ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
    CREATE FUNCTION test() RETURNS void AS $$
    << outerblock >>
    DECLARE
        outer_name varchar; --无默认值
        user_id integer := 1; --默认值1
    BEGIN
        -- 创建一个子块
        DECLARE
            inter_name varchar := '我是子块的变量';
        BEGIN
        END;
        RETURN name;
    END;
    $$ LANGUAGE plpgsql;
    

    以上在outerblock块中声明了两个变量(outer_name和user_id默认值为1),在子块中声明了一个变量(inter_name)

     
    数据类型
     
    以下列举常用的数据类型以及变量声明示例。详细可以参考PostgreSQL官网或者PostgreSQL中文翻译。
     
    基本数据类型
    • 数值类型
    DECLARE
        quantity1 numeric;      --任何精度和比例的数字值
        quantity2 numeric(4);   --4个精度的整数
        quantity3 numeric(6,2); --6个精度的数字,小数点后两位
    • 整数类型
    DECLARE
        user_id1 smallint/int2; --2字节整数
        user_id2 integer/int4;  --4字节整数(典型选择)
        user_id3 bigint/int8;   --8字节整数
    • 浮点类型
    DECLARE
        score1 real;             --4字节
        score2 double precision; --8字节
    • 序数类型
    smallserial、serial和bigserial类型不是真正的类型,它们只是为了创建唯一标识符列而存在的方便符号(类似其它一些数据库中支持的AUTO_INCREMENT属性)。 在目前的实现中:
    CREATE TABLE tablename (
        colname SERIAL
    );
    
    等价于以下语句:
    
    CREATE SEQUENCE tablename_colname_seq;
    CREATE TABLE tablename (
        colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
    );
    ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

    声明:

    DECLARE
        data_id1 smallserial/serial2; --2字节序数
        data_id2 serial/serial4;      --4字节序数
        data_id3 bigserial/serial8;   --8字节序数
    • 字符类型
    DECLARE
    	name1 character varying(n)/varchar(n);	--有限制的变长
    	name2 character(n)/char(n);	            --定长,空格填充
    	name3 text  ;                            --无限变长
    • 布尔类型
    DECLARE
    	is_correct boolean; --状态为真或假
    • 数组类型
    DECLARE
        pay_by_quarter1 integer[] ;       --integer类型一维数组
        pay_by_quarter2 integer ARRAY[4]; --integer类型一维数组
        schedule        text[][];         --text类型二维数组
    • JSON类型
    JSON类型包括两种类型,JSON和JSONB类型。它们几乎接受完全相同的值集合作为输入。
    DECLARE
     
    DECLARE
        config1 JSON;  --JSON类型
        config2 JSONB; --JSONB类型
    

    高级数据类型

    • 复制类型
    %TYPE提供了一个变量或表列的数据类型。你可以用它来声明将保持数据库值的变量。例如,如果你在users中有一个名为user_id的列。要定义一个与users.user_id具有相同数据类型的变量:
    DECLARE
        user_id users.user_id%TYPE;
    • 行类型
    一个组合类型的变量被称为一个行变量(或行类型变量)。这样一个变量可以保持一个SELECT或FOR查询结果的一整行,前提是查询的列集合匹配该变量被声明的类型。该行值的各个域可以使用通常的点号标记访问,例如rowvar.field。
    DECLARE
        t2_row table2%ROWTYPE;--table2表的行类型
    • 记录类型
    记录变量和行类型变量类似,但是它们没有预定义的结构。它们采用在一个SELECT或FOR命令期间为其赋值的行的真实行结构。一个记录变量的子结构能在每次它被赋值时改变。这样的结果是直到一个记录变量第一次被赋值之前,它都没有子结构,并且任何尝试访问其中一个域都会导致一个运行时错误。
    DECLARE
        name RECORD; --记录类型
    

    以上为本篇文章介绍的变量声明以及常用的数据类型,欢迎各位批评指正。

    关于作者
     
    大家有需要介绍哪些部分,或者一些想法欢迎联系我。
     
    GISer
    QQ: 1016817543
    邮箱:1016817543@qq.com
    github:https://github.com/MrSmallLiu (欢迎star)
     
    刘航,国信司南(北京)地理信息技术有限公司,技术经理。负责过多个基于 PostgreSQL 数据库以及 PostGIS 的大中型项目。公司矢量切片产品(基于 PostgreSQL 数据库)研发核心人员。

     
  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/sandata/p/12802333.html
Copyright © 2011-2022 走看看