Postgresql 从postgres中的公共表表达式返回数据

Postgresql 从postgres中的公共表表达式返回数据,postgresql,Postgresql,我正试图将公共表表达式中的一些数据返回到后端,但无法返回,因为Postgres看不到该表 CREATE OR REPLACE FUNCTION request( question_id_func INTEGER, requester_account_id_func INTEGER, counter_func NUMERIC ) RETURNS INTEGER AS $$ with notif AS ( INSET INTO notification(..

我正试图将公共表表达式中的一些数据返回到后端,但无法返回,因为Postgres看不到该表

CREATE OR REPLACE FUNCTION request(
    question_id_func INTEGER,
    requester_account_id_func INTEGER,
    counter_func NUMERIC
) RETURNS INTEGER AS $$ 

  with notif AS (
     INSET INTO notification(...) VALUES (...) RETURNING *
  )
UPDATE question....
RETURN (SELECT notif_id FROM notif); 

END $$ LANGUAGE PLPGSQL 
有谁对如何从CTE中提取数据并返回有更好的想法吗?
非常感谢。

您需要将UPDATE语句放入CTE,然后使用最终SELECT语句将输出分配给函数变量

例如:

CREATE OR REPLACE FUNCTION request(
    question_id_func INTEGER,
    requester_account_id_func INTEGER,
    counter_func NUMERIC
) RETURNS INTEGER AS $body$ 

DECLARE
  result integer;

BEGIN
  WITH notif AS (
    INSERT INTO notification(...) VALUES (...) RETURNING *
  ),
  question_update AS (
    UPDATE question....
  )
  SELECT notif.notif_id INTO result FROM notif;

  RETURN result;

END $body$ LANGUAGE PLPGSQL 

您需要将UPDATE语句放入CTE,然后使用最终SELECT语句将输出分配给函数变量

例如:

CREATE OR REPLACE FUNCTION request(
    question_id_func INTEGER,
    requester_account_id_func INTEGER,
    counter_func NUMERIC
) RETURNS INTEGER AS $body$ 

DECLARE
  result integer;

BEGIN
  WITH notif AS (
    INSERT INTO notification(...) VALUES (...) RETURNING *
  ),
  question_update AS (
    UPDATE question....
  )
  SELECT notif.notif_id INTO result FROM notif;

  RETURN result;

END $body$ LANGUAGE PLPGSQL