返回首页

gbase数据、南大通用产品文档:GBase8s多个行和表达式

更新日期:2024年09月11日

INSERT 语句的其他主要形式以 SELECT 语句替代 VALUES 子句。
此特性允许您插入下
列数据:
仅用一条语句处理多个行(每当 SELECT 语句返回一行,就插入一行)

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 172 -
计算值(VALUES 子句仅允许常量),由于 projection 列表可包含表达式
例如,假设对于已付款但尚未装运的每个订单都需要电话跟进。下列示例中的 INSERT 语
句找到那些订单并为每一订单在 cust_calls 中插入一行:
INSERT INTO cust_calls (customer_num, call_descr)
SELECT customer_num, order_num FROM orders
WHERE paid_date IS NOT NULL
AND ship_date IS NULL;
此 SELECT 语句返回两列。将来自这些列的数据(在每一选择了的行中)插入
到 cust_calls 表的命名了的列内。然后,将(来自 SERIAL 列order_num 的)订单编号插入
到呼叫描述,这是一个字符列。请记住,数据库服务器允许您将整数值插入到字符列内。
它自动地将序列编号转换为十进制数字的字符串。

STATIO_SYS_TABLES 视图显示命名空间中所有系统表的IO 状态信息。
名称
类型
描述
relid
oid
表OID。
schemaname
name
该表模式名。
relname
name
表名。
heap_blks_read
bigint
从该表中读取的磁盘块数。
heap_blks_hit
bigint
该表缓存命中数。
idx_blks_read
bigint
从表中所有索引读取的磁盘块数。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
1046
名称
类型
描述
idx_blks_hit
bigint
表中所有索引命中缓存数。
toast_blks_read
bigint
该表的TOAST 表读取的磁盘块数(如果存在)。
toast_blks_hit
bigint
该表的TOAST 表命中缓冲区数(如果存在)。
tidx_blks_read
bigint
该表的TOAST 表索引读取的磁盘块数(如果存在)。
tidx_blks_hit
bigint
该表的TOAST 表索引命中缓冲区数(如果存在)。

自治事务可以在函数中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,
执行的函数块中使用包含start transaction 和commit/rollback 的sql,其余语法与CREATE
FUNCTION 创建函数语法类似,一个简单的用例如下:
--创建表。
CREATE TABLE test1 (a int, b text);
--创建包含自治事务的函数。
CREATE OR REPLACE FUNCTION autonomous_easy_2(i int) RETURNS integer
LANGUAGE plpgsql
AS $$
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
START TRANSACTION;
INSERT INTO test1 VALUES (2, 'a');
IF i % 2 = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
RETURN i % 2 = 0;
END;
$$;
--执行命令。
select autonomous_easy_2(1);
--执行结果。
autonomous_easy_2
-------------------
0
(1 row)
--执行命令,查询表数据。
select * from test1;
--执行结果。
a | b

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
724
---+---
(0 rows)
--执行命令。
select autonomous_easy_2(2);
--执行结果。
autonomous_easy_2
-------------------
1
(1 row)
--执行命令,查询表数据。
select * from test1;
--执行结果
a | b
---+---
2 | a
(1 row)
--清空表数据。
truncate table test1;
--在回滚的事务块中执行包含自治事务的函数。
begin;
insert into test1 values(1,'b');
select autonomous_easy_2(2);
rollback;
--检查表数据。
select * from test1;
--执行结果如下。
a | b
---+---
2 | a
(1 row)
上述例子,
最后在回滚的事务块中执行包含自治事务的函数,
直接说明了自治事务的特
性,即主事务的回滚,不会影响自治事务已经提交的内容。