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

人大金仓数据库KingbaseES --PLSQL 的GET语句

原创 数据猿 2024-01-05
231


关键字:

GET、人大金仓、KingbaseES

GET语句介绍

在PLSQL中,GET语句通常用来获得系统的状态指示语句。

  1. GET语句的语法

get_statement ::=

GET [ CURRENT ] DIAGNOSTICS variable { = | := } item [ , ... ];

  1. GET语句的语法解析

item 是系统的一些表示状态信息的关键字,目前 item 有两个取值:

• ROW_COUNT 最近执行的 SQL 语句处理的元组个数

• SYS_CONTEXT 执行 GET 语句时的调用堆栈

GET语句的使用场景

(1)ROW_COUNT:捕获最近的SQL命令处理的行数

\set SQLTERM /

CREATE OR REPLACE FUNCTION func1() RETURNS INT AS

DECLARE

a1 bigint;

BEGIN

DELETE FROM te1;

GET DIAGNOSTICS a1 = ROW_COUNT;

RAISE NOTICE 'ROW_COUNT is %',a1;

RETURN 1;

END;

/

SELECT func1();

(2)SYS_CONTEXT:捕获异常时的stack信息

\set SQLTERM /

CREATE OR REPLACE FUNCTION func1() RETURNS INT AS

DECLARE

a1 text;

BEGIN

INSERT INTO te1 VALUES(3,'tianjin');

GET DIAGNOSTICS a1 =SYS_CONTEXT;

RAISE NOTICE 'SYS_CONTEXT is %',a1;

RETURN 1;

END;

/

SELECT func1();

(3)另外,获得系统的状态指示还有一种方式是使用变量 FOUND。变量 FOUND 是一个布尔类型的局部变量,在每一个存储过程体中初始值是 false,下面语句的执行将修改 FOUND 的值:

  • SELECT INTO 若没有元组返回,则 FOUND 是 false,否则 FOUND 是 true。
  • PERFORM 若这个命令产生或者删除元组,则 FOUND 是 true,否则是 false。
  • UPDATE INSERT DELETE 若没有影响任何元组,则 FOUND 是 false,否则是 true。
  • FETCH 若得到一个元组,则 FOUND 是 true,否则是 false。
  • FOR 若执行超过一次(含一次),则 FOUND 是 true,否则是 false。若存在 FOR 循环,则会设置 FOUND, 在 FOR 循环内部,FOUND 变量不会再次被 FOR 循环修改,但有可能被 FOR循环中执行的语句修改。

示例:

CREATE OR REPLACE FUNCTION func1() RETURNS INT AS $$

DECLARE

a1 int;

BEGIN

DELETE FROM te1;

IF FOUND THEN

INSERT INTO te2 VALUES(1,'test found');

END IF;

RETURN 1;

END;

$$ LANGUAGE plpgsql;

SELECT func1();

SELECT * FROM te2;

参考资料

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

评论