创建返回表大小的函数

安德鲁

我的代码:

CREATE OR REPLACE FUNCTION sizeOfTableFunction
(
  p_tableName varchar(100)
)
RETURNS integer 
AS $$
DECLARE
  p_tableSize integer;
BEGIN
  SELECT count(*) into p_tableSize from p_tableName;
  return p_tableSize;
END;
$$ LANGUAGE plpgsql STRICT;

功能已正确创建:

CREATE FUNCTION

执行:

SELECT * FROM sizeOfTableFunction('Run');

输出-执行功能是否有问题?:

mydb=> SELECT * FROM sizeOfTableFunction('Run');
ERROR:  relation "p_tablename" does not exist
LINE 1: SELECT count(*)                  from p_tableName
                                              ^
QUERY:  SELECT count(*)                  from p_tableName
CONTEXT:  PL/pgSQL function "sizeoftablefunction" line 5 at SQL statement
a_horse_with_no_name

为此,您需要动态SQL:

CREATE OR REPLACE FUNCTION sizeOfTableFunction
(
  p_tableName varchar(100)
)
RETURNS integer 
AS $$
DECLARE
  p_tableSize integer;
BEGIN
  execute 'SELECT count(*) from '||p_tableName into p_tablesize; -- this is the difference
  return p_tableSize;
END;
$$ LANGUAGE plpgsql STRICT;

为了安全起见,最好使用该quote_ident功能,以防万一您的表名包含特殊字符。它还为您提供了防止SQL注入的保护。

execute 'SELECT count(*) from '||quote_ident(p_tableName) into p_tablesize;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从函数返回的数组的大小

来自分类Dev

通过多次调用函数创建表以返回记录

来自分类Dev

创建一个函数以返回表SQL

来自分类Dev

使用%ROWTYPE和TABLE OF在包中创建返回表的函数

来自分类Dev

创建函数以从SQL Server 2008中的表返回结果

来自分类Dev

plpgsql函数:从随机表创建的视图返回行

来自分类Dev

MSSQL-创建表函数,返回子字符串

来自分类Dev

如何创建一个返回表行数的函数?

来自分类Dev

函数返回表变量

来自分类Dev

Lua表函数返回

来自分类Dev

从函数返回的表继承

来自分类Dev

SQL存储过程仅返回函数创建的表的第一行

来自分类Dev

尝试使用上下文创建表和插入行的SQL CLR函数返回错误

来自分类Dev

创建返回接口的函数映射

来自分类Dev

使用eval函数返回表

来自分类Dev

LuaPlus:如何使函数返回表?

来自分类Dev

从函数返回表。pl / sql

来自分类Dev

Postgres函数:返回多个表

来自分类Dev

SQL函数返回视图或表

来自分类Dev

函数 postgres 中的返回表

来自分类Dev

C函数无法返回正确的数组大小

来自分类Dev

PostgreSQL-从函数返回n大小的varchar

来自分类Dev

以MB而不是KB的形式返回表的大小

来自分类Dev

以MB而不是KB的形式返回表的大小

来自分类Dev

SQL:无法创建函数返回表。“表在此位置无效,期望:位,布尔值,布尔值,...。”

来自分类Dev

创建CLR表值函数

来自分类Dev

创建CLR表值函数

来自分类Dev

图标调整大小构造函数返回错误的大小

来自分类Dev

图标调整大小构造函数返回错误的大小