暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES truncate,case和return query使用

原创 数据猿 2023-12-19
548


关键字:

truncate, case, return query、人大金仓、KingbaseES

truncate

TRUNCATE是一种用于快速删除表中所有数据的操作。它类似于DELETE语句,但具有以下区别和特点:

1. 速度:TRUNCATE操作通常比使用DELETE语句删除所有行更快。这是因为TRUNCATE操作直接删除整个表的内容,而不需要逐行执行删除操作。

2. 事务:TRUNCATE操作是一个事务操作,这意味着在执行TRUNCATE时会启动一个事务,并且该操作是不可逆的。如果TRUNCATE语句执行成功,则表中的所有数据将被永久删除,无法回滚。

3. 触发器和日志:TRUNCATE操作不会触发表上的触发器,也不会记录删除操作的日志。这意味着在执行TRUNCATE时,不会执行与触发器关联的任何操作,并且不会在日志中记录每个行的删除信息。

要使用TRUNCATE语句删除表中的所有数据,可以使用以下语法:

TRUNCATE TABLE table_name;

其中,table_name是要删除数据的表的名称。

请注意,TRUNCATE操作会删除表中的所有数据,但不会删除表本身。如果要删除整个表(包括结构和数据),可以使用DROP TABLE语句。

重要提示:在执行TRUNCATE操作之前,请务必备份表中的数据,以防意外发生。

case

在SQL中,CASE表达式用于在查询中进行条件判断和返回不同的结果。它有两种形式:简单形式和搜索形式。

1. 简单形式:

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

...

ELSE result

END

在简单形式中,每个WHEN子句都有一个条件和一个结果。条件满足时,返回对应的结果。如果没有任何条件满足,则返回ELSE子句中的结果。

示例:

SELECT

CASE

WHEN score >= 90 THEN 'A'

WHEN score >= 80 THEN 'B'

WHEN score >= 70 THEN 'C'

ELSE 'D'

END AS grade

FROM students;

上述示例根据学生的分数将其等级分为A、B、C或D。

2. 搜索形式:

CASE expression

WHEN value1 THEN result1

WHEN value2 THEN result2

...

ELSE result

END

在搜索形式中,CASE后面的表达式的值与WHEN子句中的值进行比较。如果匹配,则返回对应的结果。如果没有匹配的值,则返回ELSE子句中的结果。

示例:

SELECT

CASE gender

WHEN 'M' THEN 'Male'

WHEN 'F' THEN 'Female'

ELSE 'Unknown'

END AS gender_category

FROM employees;

上述示例将员工的性别转换为对应的类别,如'M'转换为'Male','F'转换为'Female',其他值转换为'Unknown'。

这是CASE表达式的基本用法。它还可以与其他查询语句和函数一起使用,以实现更复杂的逻辑和计算。

return query

在SQL中,RETURN QUERY用于在函数中返回一个查询的结果集。它可以将一个 SELECT查询的结果集作为函数的返回值。

以下是一个示例:

CREATE OR REPLACE FUNCTION get_employee_names()

RETURNS TABLE (employee_name TEXT)

AS $$

BEGIN

RETURN QUERY SELECT name FROM employees;

END;

$$ LANGUAGE plpgsql;

在上述示例中,get_employee_names函数返回一个结果集,其中包含employees表中所有员工的姓名。函数的返回类型是一个表,它有一个名为employee_name的列,其数据类型为TEXT。可以在调用函数时将其作为一个查询来使用:

SELECT * FROM get_employee_names();

这将返回一个包含所有员工姓名的结果集。

以下是另一个示例:

CREATE TABLE t1(id int);

INSERT INTO t1 SELECT generate_series(1,10);

CREATE or replace function test_returnquery()

returns TABLE(id int)

as $$

DECLARE

BEGIN

return query select * from t1 where t1.id < 3;

raise info 'not return after return query';

END;

$$ language plpgsql;

测试该函数执行结果如下:

kingbase=# select test_returnquery();

INFO: not return after return query

test_returnquery

------------------

1

2

(2 rows)

可知return query不会立即退出当前函数。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论