Мне нужно выполнить обновление для каждого возврата выбора, но я не знаю, как это сделать.POSTGRESQL - FUNCTION SELECT + UPDATE
В Жар у меня есть этот код:
BEGIN
FOR
SELECT data_cadastro || ' ' || hora_cadastro as data_hora_cadastro,codigo_alteracao_convenio
FROM CC_ALTERACAO_CONVENIO
INTO:data_hora_cadastro,codigo_alteracao_convenio
DO
BEGIN
update CC_ALTERACAO_CONVENIO
set data_hora_cadastro = :data_hora_cadastro
where codigo_alteracao_convenio = :codigo_alteracao_convenio;
suspend;
END
END
Я хочу изменить, чтобы функции в PostgreSQL.
Я пробовал это, но не работал, потому что я не знаю синтаксиса postgresql, как я могу это сделать.
CREATE OR REPLACE FUNCTION sim.ajuste_alteracao_convenio(OUT data_hora_cadastro character varying, OUT codigo_alteracao_convenio integer)
RETURNS SETOF record AS
$BODY$
DECLARE
v_data_hora_cadastro character varying;
v_codigo_alteracao_convenio INTEGER;
BEGIN
RETURN QUERY
SELECT data_cadastro || ' ' || hora_cadastro as data_hora_cadastro,codigo_alteracao_convenio
FROM sim.CC_ALTERACAO_CONVENIO
--loop
BEGIN
update sim.CC_ALTERACAO_CONVENIO
set data_hora_cadastro = v_data_hora_cadastro
where codigo_alteracao_convenio = v_codigo_alteracao_convenio;
END
--END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
Может ли кто-нибудь дать мне направление, как я могу это решить?
решаемые
create type foo as (
data_hora_cadastro timestamp,
codigo_alteracao_convenio integer
)
CREATE OR REPLACE FUNCTION sim.ajuste_alteracao_convenio3()
RETURNS SETOF foo AS
$BODY$
DECLARE
r foo%rowtype;
BEGIN
FOR r IN SELECT data_cadastro || ' ' || hora_cadastro as data_hora_cadastro,codigo_alteracao_convenio FROM sim.CC_ALTERACAO_CONVENIO
LOOP
update sim.CC_ALTERACAO_CONVENIO
set data_hora_cadastro = r.data_hora_cadastro
where codigo_alteracao_convenio = r.codigo_alteracao_convenio;
RETURN NEXT r; -- return current row of SELECT
END LOOP;
RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;
Спасибо всем
IIUC, у вас есть отдельные поля для {дата, время}, и вы хотите обновить {временную метку} столбец их сочетание. В этом случае вам не нужен курсор или цикл, и вам не понадобится функция. – joop
@joop Спасибо за ответ. Мне нужно создать новую функцию для обновления и выполнить ее в моей функции? –
Это может быть намного проще. Является 'codigo_alteracao_convenio' колонкой' UNIQUE'? Если вы предоставляете свою версию Postgres и фактическое определение таблицы (например, вы должны *), все становится ясным. –