Почему создание следующих подготовленных утверждений не удается? - PullRequest
0 голосов
/ 27 июня 2018

Почему в psql и postgresql не удается создать следующие подготовленные операторы? Спасибо.

mytestdb=# PREPARE fooplan (INT, VARCHAR(80)) AS
    CREATE TABLE foo (id INT, name VARCHAR(80));  PREPARE
ERROR:  syntax error at or near "CREATE"
LINE 2:     CREATE TABLE foo (id INT, name VARCHAR(80));

и

mytestdb=# PREPARE fooplan (INT, VARCHAR(80)) AS
    CREATE TABLE foo (id INT, name VARCHAR(80)); INSERT INTO foo VALUES($1, $2); PREPARE
ERROR:  syntax error at or near "CREATE"
LINE 2:     CREATE TABLE foo (id INT, name VARCHAR(80));
            ^
ERROR:  there is no parameter $1
LINE 1: INSERT INTO foo VALUES($1, $2);
                               ^

1 Ответ

0 голосов
/ 27 июня 2018

Только подготовленные команды DML могут использоваться в подготовленном выражении. Руководство:

Любой оператор SELECT, INSERT, UPDATE, DELETE или VALUES.

Команда DDL CREATE TABLE недопустима.

И только одно утверждение. INSERT в вашем втором примере - это не часть подготовленного утверждения, а второе, отдельное, независимое утверждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...