我试图让这个PL / pgSQL函数起作用:
CREATE OR REPLACE FUNCTION loopcolumns2(tableName TEXT, pourcentage real)
RETURNS void AS $$
DECLARE
_name text;
missing_percentage real;
BEGIN
FOR _name IN SELECT column_name from information_schema.columns where table_name=tableName LOOP
SELECT 100 - (count(_name) * 100) / count(*) INTO missing_percentage FROM tableName;
IF (missing_percentage > pourcentage)
THEN ALTER TABLE tableName DROP COLUMN _name;
END IF;
END LOOP;
END; $$ LANGUAGE plpgsql;
该函数的目标是循环遍历表的所有列,删除缺失值百分比大于输入百分比的列。
我收到以下错误:
SELECT 100 - (count( $1 ) * 100) / count(*) FROM $2
^
CONTEXT: SQL statement in PL/PgSQL function "loopcolumns2" near line 6
答案 0 :(得分:1)
您正试图通过tableName
vaiable存储的文字Postgres
。你不能这样做,因为tableName
认为你希望他从名为DECLARE query TEXT;
...
query := 'SELECT 100 - (count(' || _name::TEXT || ') * 100) / count(*) FROM '
|| tableName::TEXT;
EXECUTE query INTO percentage ;
...
的表中进行选择,但可能这样的表不存在。
您需要在字符串中创建动态查询并使用EXECUTE ... INTO ...
statement。像这样:
{{1}}