[英]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.