PostgreSQL: Bir toplu birkaç pgplsql prosedürleri oluşturmak

0 Cevap php

Ben birkaç benzer SQL tabloları (sadece 1 sütun değişir) ile bir PHP-komut dosyası var:

define('SQL_TABLES', '
create table hide_id (
        ID       varchar(20) references quincytrack,
        USERNAME varchar(20) not null,
        UPDATED  timestamp default current_timestamp
);
create table hide_name (
        NAME     varchar(20) not null,
        USERNAME varchar(20) not null,
        UPDATED  timestamp default current_timestamp
);
create table hide_category (
        CATEGORY varchar(120) not null,
        USERNAME varchar(20) not null,
        UPDATED  timestamp default current_timestamp
);
create table hide_appsversion (
        APPSVERSION varchar(30) not null,
        USERNAME varchar(20) not null,
        UPDATED  timestamp default current_timestamp
);
create table hide_osversion (
        OSVERSION varchar(30) not null,
        USERNAME varchar(20) not null,
        UPDATED  timestamp default current_timestamp
);

Ve ben onlardan her biri için bir Upsert yordamı oluşturmak istiyorum:

define('SQL_PROCS', '
create or replace function hide_id_upsert(
        _ID       varchar,
        _USERNAME varchar
        ) returns void as $BODY$
        begin
                update hide_id set
                        ID       = _ID,
                        USERNAME = _USERNAME,
                        UPDATED  = current_timestamp
                where ID = _ID;

                if not found then
                        insert into hide_id (
                                ID,
                                USERNAME
                        ) values (
                                _ID,
                                _USERNAME
                        );
                end if;
        end;
$BODY$ language plpgsql;
');

Ben PgPlSQL veya PHP ile bir toplu iş yapabileceğini eğer ben, merak ediyorum. Gibi bir şey:

$columns = array('ID', 'NAME', 'CATEGORY', 'APPSVERSION', 'OSVERSION');
foreach ($columns as $key) {
   $sth = $pg->prepare(sprintf(SQL_PROCS_TEMPLATE, $key, $key, ...);
   $sth->execute();
}

ama $key defalarca belirtmek zorunda yukarıdaki çirkinlik olmadan.

CentOS 5.5 Linux altında PostgreSQL 8.4.5 ve PHP 5.1.6 Kullanımı

Teşekkür ederiz! Alex

0 Cevap