je veux créer une table si cela ne fait pas, j'ai essayé ci-dessous le code:
create or replace function create_table() returns void as
$$
begin
if not exists(select *
from pg_tables
where schemaname = 'Public'
and tablename = 'test')
then
create table test
(
the_id int not null,
name text
);
end if;
end;
$$
language 'plpgsql';
Tout en exécutant cette procédure pour la première fois:
select creat_table();
la table est créée mais quand je l'exécute à nouveau, je reçois l'erreur ci-dessous:
ERROR: relation "test" already exists
CONTEXT: SQL statement "create table test
(
the_id int not null,
name text
)"
PL/pgSQL function create_table() line 8 at SQL statement
********** Error **********
ERROR: relation "test" already exists
SQL state: 42P07
Context: SQL statement "create table test
(
the_id int not null,
name text
)"
PL/pgSQL function create_table() line 8 at SQL statement
Comment y parvenir, et aussi, je souhaite appeler cette procédure à partir de la propriété Informatica Pré-SQL Cible Session de cible afin que je souhaite appeler la procédure avec le nom de la table en tant que paramètre.
Il suffit d'utiliser CREATE TABLE [IF NOT EXISTS]
Ressemble à ça,
CREATE TABLE IF NOT EXISTS test (
the_id int PRIMARY KEY,
name text
);
Si vous devez l'envelopper dans une fonction (ne le faites pas, il n'ya pas de point),
CREATE FUNCTION myCreateTable() RETURNS void AS $$
CREATE TABLE IF NOT EXISTS test (
the_id int PRIMARY KEY,
name text
);
$$ LANGUAGE sql
VOLATILE;
Si vous voulez que cette fonction accepte un nom (ne le suggérez toujours pas),
CREATE OR REPLACE FUNCTION myCreateTable(myIdent text) RETURNS void AS $$
BEGIN
EXECUTE format(
'
CREATE TABLE IF NOT EXISTS %I (
the_id int PRIMARY KEY,
name text
);
',
myIdent
);
END;
$$ LANGUAGE plpgsql
VOLATILE;
[ IF NOT EXISTS ]
a été dans PostgreSQL depuis 9,1
Erreur dans votre code est:
schemaname = 'Public'
vous avez besoin : schemaname = 'public'
Mais Evan Solution est meilleur