Добрый день, уважаемые форумчане! Спустя 40-а лет работы в ИТ, в частности, с Misrosoft и СУБД MS SQL Server, добрался до PostgreSQL. Очень тому рад, поскольку вижу для себя совершенно иной продукт! Прошу подсказать азы. Буду всем очень благодарен.
Все, что мне удалось на сегодняшний день, это перенести базу данных (таблицы) из оригинала mssql и выполнить простейшие конструкции, как то:
deallocate reviews;
prepare reviews(int, varchar) AS
select r."TID", r."OrderID", $2 || r."Login" as login, to_char("RD", 'yyyy-mm-dd hh24:mi:ss') as rd from public."Reviews_tb" as r where "OrderID"=$1;
execute reviews(5480, '...');
Оказался в серьезном затруднении, поскольку все мои попытки использовать локальные объявления переменных внутри произвольного скрипта в теле запроса PgAdmin заканчиваются ничем…
Как написать и выполнить простой скрипт, содержащий переменные, внутренние вычисления и их использование в SQL-запросах, например, мне нужно воспроизвести функцию (пусть пока как есть, без pg-оптимизации):
CREATE FUNCTION [dbo].[GET_SplittedStrings_fn](
@pSource varchar(MAX),
@pSplitter varchar(10)
)
returns @data TABLE(n int IDENTITY(0,1), item varchar(1000))
AS
BEGIN
DECLARE
@p int,
@l int,
@value varchar(1000)
set @l = LEN(@pSplitter)
WHILE LEN(@pSource) > 0
BEGIN
select @p = CHARINDEX(@pSplitter, @pSource)
if @p = 0
select @p = LEN(@pSource) + @l
set @value = LEFT(@pSource, @p-1)
insert into @data select @value
set @pSource = SUBSTRING(@pSource, @p+@l, LEN(@pSource))
END
return
END
функция выполняет простой split строки по заданному разделителю и возвращает результат в формате таблицы с номером значения в первом поле.
Моя проблема не только в том, как получить аналог в Postgres, но и в том, как «проиграть» код. В mssql нет особых ограничений в создании скриптовых конструкций, к примеру, код в обрамлении BEGIN … END можно легко выполнить в простом New Query. В PgAdmin я никак не могу найти вариант для подобных тестов, кроме моего «reviews». Получается как-то совсем неуклюже.