Использование SELECT INTO [tableName] в хранимой процедуре не работает - PullRequest
0 голосов
/ 24 ноября 2010

Я пытаюсь использовать имя таблицы в

SELECT INTO [tableName]

Но он жалуется, что [tableName], как ожидается, будет переменной записи, переменной строки или списком скалярных переменных.Как я могу поместить результат выбора в таблицу вместо переменной в хранимой процедуре?

Ответы [ 3 ]

6 голосов
/ 24 ноября 2010

Как упомянуто в руководстве здесь:

http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW

вы не можете использовать этот синтаксис внутри процедуры pl / pgSQL.

Вам необходимо использовать следующий синтаксис:

CREATE TABLE new_table
AS
SELECT ....
1 голос
/ 24 ноября 2010

Вы хотите запрос INSERT INTO ... SELECT, а не SELECT INTO. Например:

INSERT INTO my_table (name, my_avg) SELECT name, AVG(col) FROM your_table GROUP BY name

Если вы на самом деле не хотели создавать новую таблицу, где SELECT INTO должен работать правильно:

vsavard_db=> SELECT 1 INTO b;
SELECT
Time : 47,268 ms
vsavard_db=> SELECT * FROM b;
 ?column? 
----------
        1
(1 line)
0 голосов
/ 24 ноября 2010

Ваш синтаксис неправильный, согласно http://www.postgresql.org/docs/8.1/static/sql-selectinto.html ваш сохраненный процесс должен следовать этому шаблону:

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ AS output_name ] [, ...]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] ]

EX: ВЫБРАТЬ * В my_table WHERE x = @ myParam

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