【问题标题】:PostgreSQL declare unnamed rowPostgreSQL 声明未命名行
【发布时间】:2017-10-09 03:51:30
【问题描述】:

我使用以下选择语句来检索我需要处理的列数据:

SELECT c.table_schema, c.table_name, c.column_name, c.column_default, c.data_type, c.udt_name,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name
FROM information_schema.columns AS c
    LEFT JOIN information_schema.key_column_usage AS kcu
        ON c.table_name = kcu.table_name AND c.column_name = kcu.column_name
    LEFT JOIN information_schema.constraint_column_usage as ccu
        ON kcu.constraint_name = ccu.constraint_name
WHERE c.table_name = 'mytable'

现在我需要遍历这个 select 语句的结果。我是这样做的:

CREATE OR REPLACE FUNCTION public.myfunction(tableName CHARACTER VARYING(18), rows NUMERIC(10))
RETURNS VOID AS $BODY$
DECLARE
  r ( table_schema varchar,
    table_name varchar,
    column_name varchar,
    column_default varchar,
    data_type varchar,
    udt_name varchar,
    foreign_table_name varchar,
    foreign_column_name varchar );
BEGIN
  FOR r IN (SELECT c.table_schema, c.table_name, c.column_name, c.column_default, c.data_type, c.udt_name,
                ccu.table_name AS foreign_table_name,
                ccu.column_name AS foreign_column_name
            FROM information_schema.columns AS c
                LEFT JOIN information_schema.key_column_usage AS kcu
                    ON c.table_name = kcu.table_name AND c.column_name = kcu.column_name
                LEFT JOIN information_schema.constraint_column_usage as ccu
                    ON kcu.constraint_name = ccu.constraint_name
            WHERE c.table_name = tableName) LOOP

  -- My plpgsql

  END LOOP;
  RETURN;
END;
$BODY$ LANGUAGE plpgsql VOLATILE;

如您所见,我通过命名列名和列类型来声明行r。哪个不起作用,我收到以下错误消息:ERROR: syntax error at or near "(" Position: 615 Where: invalid type name "( table_schema varchar, table_name varchar, column_name varchar, column_default varchar, data_type varchar, udt_name varchar, foreign_table_name varchar, foreign_column_name varchar )"

我还尝试将varchar 更改为information_schema.sql_identifierinformation_schema.character_data,它们是我要读取的列的information_schema 中的对象类型。

我是在声明正确的行和/或我应该使用不同的方法来循环具有多个连接的 select 语句吗?

【问题讨论】:

    标签: sql database postgresql plpgsql


    【解决方案1】:

    如果你使用记录可能很简单

    DECLARE
          r        record;
    BEGIN
          FOR r IN select * from information_schema.columns
          LOOP
                 ...
    
          END LOOP;
    

    【讨论】:

    • 哇,这么简单。感谢您这么快回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多