Ответ 1
Postgres 9
DO $$
-- declare
BEGIN
/* pl/pgsql here */
END $$;
С SQL Server я могу выполнить код ad hoc T-SQL с полной процедурной логикой через SQL Server Management Studio или любой другой клиент. Я начал работать с PostgreSQL и столкнулся с некоторой разницей в том, что PGSQL требует, чтобы какая-либо логика была встроена в функцию.
Есть ли способ выполнить код PL/PGSQL без создания функции?
Postgres 9
DO $$
-- declare
BEGIN
/* pl/pgsql here */
END $$;
Нет, еще нет. Версия 9.0 (все еще альфа) будет иметь эту опцию (do), вам придется подождать, пока она не будет выпущена.
Я изо всех сил пытался заставить это работать, потому что он довольно строг в добавлении полуколонок в нужные места. Но как только вы привыкнете к этому, он работает хорошо. Помимо невозможности возвращать записи, конечно, вы можете создавать уведомления и исключения и выполнять другие обходные пути, например, используя временные таблицы, как указано в комментарии @ErwinBrandstetter в комментарии выше.
например:.
DO
$$
BEGIN
IF EXISTS(SELECT 'any rows?'
FROM {your_table}
WHERE {your_column} = 'blah')
THEN
RAISE NOTICE 'record exists';
ELSE
RAISE EXCEPTION 'record does not exist';
END IF;
DROP TABLE IF EXISTS foo;
CREATE TEMP TABLE foo AS
SELECT 'bar'::character varying(5) as baz;
END
$$;
SELECT * FROM foo;