PL / pgSQL函数无法正常工作

时间:2013-11-04 07:04:01

标签: function postgresql plpgsql exists

我正在编写一个函数来为给定的表计数创建表。在创建特定表之前,我想检查该表是否已存在:

create or replace function test (numoftables int) returns void as $$
    declare
    i integer;
    begin 
    i:=0;
    while i< numoftables loop
        if not exists (select * from table$i$)  -- check if table exists
        then 
            create table table$i$(
                column1 int,
                column2 int,
                column1 text,
                column2 text,
                column3 text); 
        end if;
    end loop;
end;

$$
language 'plpgsql';

当我运行此代码时,它给了我一个错误。

ERROR:  relation "table$i$" does not exist
LINE 1: SELECT not exists (select * from table$i$)

任何人都可以告诉我如何更改此代码才能正常工作。

1 个答案:

答案 0 :(得分:1)

  • 你不能像这样检查表的存在。使用pg_class系统表检查表是否存在
  • 你必须在函数内增加i,否则你最终将无限循环

create or replace function test (numoftables int) returns void as $$
    declare
    i integer;
    begin 
    i:=0;
    while i< numoftables loop
        if not exists (select * from pg_class where relname = 'table' || i::text)
        then
            execute '
            create table table' || i::text || '(
                column1 int,
                column2 int,
                column3 text,
                column4 text,
                column5 text);
            ';
        end if;
        i := i + 1;
    end loop;
end;

$$
language 'plpgsql';

我已经尝试过多改变你的逻辑或语法,所以它仍然是你的功能。

<强> sql fiddle demo