【问题标题】:query has no destination for result data error查询没有结果数据错误的目的地
【发布时间】:2023-03-06 03:40:01
【问题描述】:

我在 `

中有以下功能
CREATE OR REPLACE FUNCTION public.get_avalable_providers(
  start_day_id integer,
  end_day_id integer,
  number_of_days integer,
  requested integer)
    RETURNS SETOF provider AS
$BODY$declare
required integer;
available_product integer;
p provider;
p_id integer;
noa integer;
begin
   FOR p IN SELECT * FROM provider
   loop     
      FOR p_id, noa IN SELECT id, number_of_availables FROM product
         WHERE provider_id = p.id
   LOOP
    required = requested/noa;
                      select available_product = 
                   public.get_available_products_biggerthan(
        start_day_id, end_day_id, number_of_days, required, p_id);
     if available_product = number_of_days then
          return next p;
            exit;         
         end if;
      END LOOP;  
  end loop;   

  return;
  end;         
  $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
 ROWS 1000;
 ALTER FUNCTION public.get_avalable_providers(integer, integer, integer, 
      integer, integer)
  OWNER TO postgres;

上面的函数应该返回一些在天数范围内有足够数量的请求product的提供者 它正在利用花药功能get_available_products_biggerthan,我收到以下错误:

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 
get_avalable_products(integer,integer,integer,integer,integer) line 15 at 
SQL statement

问题 我在哪里犯错?

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW

    产生单行的 SQL 命令的结果(可能是 多列)可以分配给记录变量,行类型 变量或标量变量列表。这是通过编写 基本 SQL 命令并添加 INTO 子句

    试试下面(我只修复了明显的语法):

    CREATE OR REPLACE FUNCTION public.get_avalable_providers(
      start_day_id integer,
      end_day_id integer,
      number_of_days integer,
      requested integer)
        RETURNS SETOF provider AS
    $BODY$declare
    required integer;
    available_product integer;
    p provider;
    p_id integer;
    noa integer;
    begin
       FOR p IN (SELECT * FROM provider)
       loop     
          FOR p_id, noa IN (SELECT id, number_of_availables FROM product
             WHERE provider_id = p.id)
       LOOP
        required = requested/noa;
        select public.get_available_products_biggerthan(
            start_day_id, end_day_id, number_of_days, required, p_id) INTO available_product ;
         if available_product = number_of_days then
              return next p;
                exit;         
             end if;
          END LOOP;  
      end loop;   
    
      return;
      end;         
      $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100
     ROWS 1000;
    

    【讨论】:

    • 对不起,什么是明显的语法错误,因为我已经更改了一些名称并发布了函数,所以对我来说不容易注意到这一点
    • 我选择值INTO variable
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多