gpt4 book ai didi

postgresql - 如何编写返回文本或整数值的函数?

转载 作者:行者123 更新时间:2023-11-29 11:41:45 24 4
gpt4 key购买 nike

我正在使用 PostgreSQL 9.2.4。

postgres=#选择版本();

                           version
-------------------------------------------------------------
PostgreSQL 9.2.4, compiled by Visual C++ build 1600, 64-bit
(1 row)

sqlfiddle link

我的查询安全地执行了插入。我需要的是我的函数应该返回除 void 数据类型之外的东西。诸如 text("inserted into table") 或 integer(0-false,1-true) 之类的东西,对我验证它是否被插入很有用?

我需要一个在插入完成时返回 integertext 的函数的语法。用于验证目的。有什么办法可以解决吗?

最佳答案

你可能需要什么

您很可能需要一个函数返回 text,另一个函数返回 integer,或者一个函数返回 boolean 以指示成功。所有这些都是微不足道的,我会向您推荐 excellent manual on CREATE FUNCTIONcode examples in similar questions on SO .

你实际问了什么

How to write a function that returns text or integer values?

...从某种意义上说,我们有一个 返回类型是textinteger。不像建议的那样微不足道,但也并非不可能。关键词是:polymorphic types .

建立在这个简单的表格上:

CREATE TABLE tbl(
tbl_id int,
txt text,
nr int
);

此函数返回整数或文本(或任何其他类型,如果您允许的话),具体取决于输入类型。

CREATE FUNCTION f_insert_data(_id int, _data anyelement, OUT _result anyelement)
RETURNS anyelement AS
$func$
BEGIN

CASE pg_typeof(_data)
WHEN 'text'::regtype THEN
INSERT INTO tbl(tbl_id, txt) VALUES(_id, _data)
RETURNING txt
INTO _result;

WHEN 'integer'::regtype THEN
INSERT INTO tbl(tbl_id, nr) VALUES(_id, _data)
RETURNING nr
INTO _result;

ELSE
RAISE EXCEPTION 'Unexpected data type: %', pg_typeof(_data)::text;
END CASE;

END
$func$
LANGUAGE plpgsql;

调用:

SELECT f_insert_data(1, 'foo'::text);  -- explicit cast needed.
SELECT f_insert_data(1, 7);

简单案例

一个函数,返回TRUE/FALSE 以指示是否已插入一行,只有一个不同类型的输入参数:

CREATE FUNCTION f_insert_data2(_id int, _data anyelement)
RETURNS boolean AS
$func$
BEGIN

CASE pg_typeof(_data)
WHEN 'text'::regtype THEN
INSERT INTO tbl(tbl_id, txt) VALUES(_id, _data);

WHEN 'integer'::regtype THEN
INSERT INTO tbl(tbl_id, nr) VALUES(_id, _data);

ELSE
RAISE EXCEPTION 'Unexpected data type: >>%<<', pg_typeof(_data)::text;
END CASE;

IF FOUND THEN RETURN TRUE;
ELSE RETURN FALSE;
END IF;

END
$func$
LANGUAGE plpgsql;

在大多数情况下,输入类型可以替换为 text 参数,可以与任何其他类型相互转换。

关于postgresql - 如何编写返回文本或整数值的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com