首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询没有结果数据的目的地,我正面临此错误。

查询没有结果数据的目的地,我正面临此错误。
EN

Stack Overflow用户
提问于 2022-05-09 08:34:28
回答 1查看 41关注 0票数 0

PostgreSQL 14

表格

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS settings.tbl_tmp
(
    pk_sys_qr_settings_id bigint NOT NULL DEFAULT nextval('settings.tbl_tmp_pk_sys_qr_settings_id_seq'::regclass),
    sin_product smallint DEFAULT 0,
    vhr_key character varying(10) COLLATE pg_catalog."default" NOT NULL,
    vhr_value character varying(250) COLLATE pg_catalog."default",
    CONSTRAINT tbl_tmp_pkey PRIMARY KEY (pk_sys_qr_settings_id),
    CONSTRAINT tbl_tmp_vhr_key_key UNIQUE (vhr_key)
)

-函数1-从fn_test调用

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION fn_test1(sinProduct SMALLINT,
                                                                                         vhrKey VARCHAR(10), 
                                                                                        vhrValue VARCHAR(250)) 
        RETURNS VOID AS $$

BEGIN
        
        INSERT INTO settings.tbl_tmp
                (sin_product, vhr_key, vhr_value)
        VALUES
                (sinProduct, vhrKey, vhrValue);
END;
$$ LANGUAGE plpgsql;

职能2

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION fn_test(sinProduct SMALLINT,
                                                                                         vhrKey VARCHAR(10), 
                                                                                        vhrValue VARCHAR(250)) 
                RETURNS VOID AS $$
DECLARE
        a SMALLINT;

BEGIN
        BEGIN
                SELECT * FROM fn_test1(1::SMALLINT, 'Anil-5'::VARCHAR(10), 'KV-5'::VARCHAR(250));
                
                INSERT INTO settings.tbl_tmp
                        (sin_product, vhr_key, vhr_value)
                VALUES
                        (sinProduct, vhrKey, vhrValue);
    END;
END;
$$ LANGUAGE plpgsql;

-错误

代码语言:javascript
复制
ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function fn_test(smallint,character varying,character varying) line 7 at SQL statement
SQL state: 42601
EN

回答 1

Stack Overflow用户

发布于 2022-05-09 08:40:11

从手册中引用

有时,计算表达式或选择查询,但放弃结果是有用的,例如,当调用一个有副作用但没有有用结果值的函数时。若要在PL/pgSQL中执行此操作,请使用以下执行语句:

由于被调用的函数一开始不返回任何内容,所以使用perform是安全的。

因此,请使用:

代码语言:javascript
复制
perform fn_test1(1::SMALLINT, 'Anil-5'::VARCHAR(10), 'KV-5'::VARCHAR(250));

而不是select * from fn_test(..)

当您使用Postgres 14时,您也可以在这两种情况下使用一个过程,因为您不想返回结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72169092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档