sql - 从函数返回默认的 INSERT INTO 消息

标签 sql postgresql plpgsql

寻找打印出插入记录计数的默认 INSERT INTO 消息。知道这与将 RETURNS 从 void 更改为其他内容以及可能添加 OUT 参数有关吗?

CREATE OR REPLACE FUNCTION etl(from_table regclass, to_table regclass) RETURNS void AS
$$
  BEGIN

  EXECUTE 'INSERT INTO ' || to_table || ' ('
      'title'
    ') '
    'SELECT '
      'data->>''title'' as title'
    'FROM ' || from_table || ' '
    USING from_table, to_table;

END
$$ LANGUAGE plpgsql;

最佳答案

使用GET DIAGNOSTICS 命令进行填充,然后返回一个变量:

CREATE OR REPLACE FUNCTION etl(from_table regclass, to_table regclass) RETURNS integer AS
$$
DECLARE
    rows integer;
BEGIN
    EXECUTE format('INSERT INTO %I (title) 
                        SELECT data->>''title'' as title
                        FROM %I', to_table, from_table);
    GET DIAGNOSTICS rows = ROW_COUNT;
    RETURN rows;
END;
$$ LANGUAGE plpgsql;

您还应该真正使用 format() 函数来组装您的动态 SQL 命令。此外,您可以在多行中编写文字字符串,而不必在每一行都使用结束/开始引号。

关于sql - 从函数返回默认的 INSERT INTO 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42626824/

相关文章:

php - 过滤器不影响 postgreSQL 表

postgresql - 无法捕获 postgresql 9.3 中的 null_value_not_allowed 异常

sql - 函数中的循环未按预期工作

arrays - 在 plpgsql 函数中返回匹配输入数组元素的行

sql - Ruby on Rails 插件,用于在 SQL 查询的日志中显示行号

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - Active Record查询通过关系在Rails has_many中查找符合所有条件的记录

mysql - 我需要一个查询,该查询将获得具有 4 个不同条件的总和(列),其中包括分组条件

java - Spark SQL Java : Exception in thread "main" org. apache.spark.SparkException

sql - Postgres 获得单个供应商的第一个和最后一个版本