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

293 阅读3分钟

关键字:

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;

在上述示例中,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不会立即退出当前函数。