簡體   English   中英

在 dbeaver/postgres 中更新函數 sql

[英]update in a function sql in dbeaver/postgres

我必須使用 concat() 更新表中的字段,並且我正在考慮使用帶有更新 sql 的函數。 如果更新不起作用,我也想回滾。

我有這個功能,但它只適用於 select sql 和表“clients”的第一行

CREATE OR REPLACE FUNCTION value_concat()
     RETURNS record
     LANGUAGE plpgsql
    AS $function$
        DECLARE
            rows_affected integer := 0;
            query constant text not null := 'select * from db.clients';     
            result record;
                
    BEGIN           
        EXECUTE query INTO result;
        RETURN result;

        UPDATE db.clients SET clients.name = concat(clients.name, '-US');           

        exception when raise_exception
           then
               begin
                   rows_affected := 0;
                   rollback;
               end;
      RETURN record;
    END;
$function$
;

我必須在更新之前進行選擇 sql 嗎?

為什么更新不起作用,我應該在更新 sql 之前執行一個 for/loop 嗎?

下面的代碼只返回一條記錄,並不是所有的記錄都來自select sql,為什么?

  EXECUTE query INTO result;
  RETURN result;

我希望這會有所幫助。

CREATE OR REPLACE FUNCTION value_concat()
     RETURNS TABLE (
        field_name1 VARCHAR,
        field_name2 INT [, ...]
       )
     LANGUAGE plpgsql
    AS $function$
        
BEGIN           
 

    UPDATE db.clients SET clients.name = concat(clients.name, '-US');           
    
    RETURN QUERY
         select * from db.clients;

    exception when raise_exception
       then
           begin
               rows_affected := 0;
               rollback;
           end;
  RETURN record;
END;
$function$
;

我必須在更新前選擇 SQL 嗎?

無需選擇,效果很好。 您應該檢查查詢以將不需要的更新應用到其他記錄的位置。

為什么更新不起作用,我應該在更新 SQL 之前執行 for/loop 嗎?

因為您在更新之前返回並且總是跳過其余代碼。

下面的代碼只返回一條記錄,並不是所有的記錄都來自select sql,為什么?

這是因為您只返回一個記錄類型。 記錄類型只能存儲結果中的一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM