PostgreSQL查询函数内部有表和其他参数

时间:2014-10-09 10:20:41

标签: sql postgresql postgresql-9.1

我尝试根据某些条件更新表,但遗憾的是表名可以更改,因此我创建了一个函数,该函数通过2个数组并根据数组和其他表值更新表。

基本上我不想修改没有ISO标准短名称的小国家的国家代码。

我的问题是我的查询中有一些语法问题,没有别的。这是实现该查询的正确方法吗?

你的帮助是合适的。谢谢。 编辑: 该功能的最终工作版本:(请不要犹豫,建议一些改进)

CREATE OR REPLACE  FUNCTION fixCountryCodes(destinationTable text, sourceTable text)
RETURNS void
AS $$
DECLARE 
    countryNames varchar[] := ARRAY['ALD', 'BJN', 'CNM', 'CYN', 'ESB', 'IOA', 'ISR', 'KAB', 'KAS', 'NOR', 'PSX', 'SCR', 'SDS', 'SER', 'SOL', 'UMI', 'USG', 'WSB'];
    rightCountryCodes varchar[] := array['FI', 'CO', 'CY', 'TU', 'UK', 'AU', 'IS', 'KZ', 'KZ', 'NO', 'WE', 'CH', 'OD', 'CO', 'SO', 'US', 'US', 'UK'];
BEGIN
    FOR I IN 1..array_upper(countryNames, 1) LOOP
        EXECUTE 'UPDATE ' || destinationTable || ' s ' || 'SET name = '''|| rightCountryCodes[i] || ''' FROM ' || sourceTable || ' n WHERE n.adm0_a3 LIKE ''' || countryNames[i] || ''' AND n.gid = s.id';
    END LOOP;
END
$$ LANGUAGE plpgsql;

1 个答案:

答案 0 :(得分:1)

CREATE OR REPLACE FUNCTION的语法错误。您必须使用语法:

CREATE FUNCTION name(params)
RETURNS void -- in your case 
AS $$
DECLARE ...
BEGIN
END;
$$ LANGUAGE plpgsql;