如何在Postgres 9.3中使用+ =

时间:2018-06-20 22:39:08

标签: sql postgresql postgresql-9.3

我在重新分配值时遇到麻烦,我的老师告诉我使用类似 var = var +(查询的其余部分) 但这根本没有用,这是我的代码:

create or replace function recorrertablas()
returns void as
$BODY$
declare cursorx cursor for select id, nombre as nombres from tablas;
declare cursory refcursor;
declare rec record;
declare rec2 record;
declare consulta varchar;
--declare consulta2 varchar;
begin
    open cursorx;
            loop
                fetch cursorx into rec;
                exit when not found;
                consulta= 'create table ' || rec.nombres;
                --consulta2= '';
                open cursory for select * from atributos where idtabla = rec.id;
                loop
                    fetch cursory into rec2;
                    exit when not found;
                    consulta = consulta + '(' || rec2.id || ', ' || rec2.idtabla || ', ' || rec2.nombre || ', ' ||rec2.tipodedatos ;
                    if rec2.claveprimaria = 1 then
                        consulta= consulta +', constraint pk_ ' || rec.nombres || '( ' || rec.id || '));';
                    else
                        consulta = consulta +');';
                    end if;
                end loop;
            close cursory;
        end loop;
        execute consulta;
    close cursorx;
end;
$BODY$
language plpgsql volatile;

1 个答案:

答案 0 :(得分:3)

如果您需要连接事物,请使用||运算符或如下所示的concat()函数。

您一直在使用此运算符,但是由于某种原因,您将其与+混合使用。

SELECT 'string' || 'part2';

SELECT concat('string', 'part2');

针对您的具体情况:

consulta = consulta || '(' || rec2.id || ', ' || rec2.idtabla || ', ' || rec2.nombre || ', ' ||rec2.tipodedatos ;
if rec2.claveprimaria = 1 then
  consulta= consulta || ', constraint pk_ ' || rec.nombres || '( ' || rec.id || '));';
else
  consulta = consulta || ');';

使用||运算符时,如果任何值的值为NULL,则整个输出将为NULL,但是使用concat()函数时,它将忽略NULL值并且仍然连接其他参数。