• pgsql 记录类型


       记录类型:
        见如下形式的变量声明:
        name RECORD;
        记录变量类似于行类型变量,但是它们没有预定义的结构,只能通过SELECT或FOR命令来获取实际的行结构,因此记录变量在被初始化之前无法访问,否则将引发运行时错误。
        注:RECORD不是真正的数据类型,只是一个占位符。

    基本语句:

        1. 赋值:
        PL/pgSQL中赋值语句的形式为:identIFier := expression,等号两端的变量和表达式的类型或者一致,或者可以通过PostgreSQL的转换规则进行转换,否则将会导致运行时错误,见如下示例:
        user_id := 20;
        tax := subtotal * 0.06;
        
        2. SELECT INTO:
        通过该语句可以为记录变量或行类型变量进行赋值,其表现形式为:SELECT INTO target select_expressions FROM ...,该赋值方式一次只能赋值一个变量。表达式中的target可以表示为是一个记录变量、行变量,或者是一组用逗号分隔的简单变量和记录/行字段的列表。select_expressions以及剩余部分和普通SQL一样。
        如果将一行或者一个变量列表用做目标,那么选出的数值必需精确匹配目标的结构,否则就会产生运行时错误。如果目标是一个记录变量,那么它自动将自己构造成命令结果列的行类型。如果命令返回零行,目标被赋予空值。如果命令返回多行,那么将只有第一行被赋予目标,其它行将被忽略。在执行SELECT INTO语句之后,可以通过检查内置变量FOUND来判断本次赋值是否成功,如:

        SELECT INTO myrec * FROM emp WHERE empname = myname;
        IF NOT FOUND THEN
            RAISE EXCEPTION 'employee % not found', myname;
        END IF;

        要测试一个记录/行结果是否为空,可以使用IS NULL条件进行判断,但是对于返回多条记录的情况则无法判断,如:

        DECLARE
            users_rec RECORD;
        BEGIN
            SELECT INTO users_rec * FROM users WHERE user_id = 3;
            IF users_rec.homepage IS NULL THEN
                RETURN 'http://';
            END IF;
        END;
  • 相关阅读:
    重塑矩阵
    数组拆分
    最大连续1的个数
    石子游戏
    概率与期望知识总结
    洛谷 P3951 NOIP 2017 小凯的疑惑
    关于结构体的初始化
    山海经:线段树维护最大子段和
    偏序 分块+bitset
    分块练习C. interval
  • 原文地址:https://www.cnblogs.com/pengyong1211/p/13564070.html
Copyright © 2020-2023  润新知