powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание переменных
24 сообщений из 24, страница 1 из 1
Создание переменных
    #38894939
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Подскажите пожалуйста как создать переменную в postgres. Работаю в pgAdmin III.
Например в MSQL
declare @myVar int;
в Firebird:
declare :myVar int;

И дальше делаем set и какие то вычисления с этой переменной.

А он выдает ошибку
"ОШИБКА: ошибка синтаксиса (примерное положение: "@")
LINE 1: declare @myVar int;
^
********** Ошибка ********** "

Хочу получить в стиле, но в стиле postgres:
declare @myVar int;
set @myVar = 1;
select @myVar;
...
Рейтинг: 0 / 0
Создание переменных
    #38894979
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldinЗдравствуйте. Подскажите пожалуйста как создать переменную в postgres...
it depends

--в каком месте, т.е. в каком языке [из кучи возможных]

если про sql и переменные сеанса -- http://www.sql.ru/forum/actualsearch.aspx?search=?????????? ??????&sin=0&st=t&bid=7&a=&ma=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
Создание переменных
    #38895415
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эттаAndyKuvaldinЗдравствуйте. Подскажите пожалуйста как создать переменную в postgres...
it depends

--в каком месте, т.е. в каком языке [из кучи возможных]

если про sql и переменные сеанса -- http://www.sql.ru/forum/actualsearch.aspx?search=?????????? ??????&sin=0&st=t&bid=7&a=&ma=0&dt=-1&s=1&so=1

Язык SQL Postgre. Среда SQL Editor в pgAdmin III.
Надпись "declare @a int;" приводит к ошибке, которая описана в первом посте темы.
...
Рейтинг: 0 / 0
Создание переменных
    #38895434
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin,

Расскажите, какую задачу Вы хотите решать. Может быть следует рассмотреть задачу с более высокого уровня.

Прямо сейчас Вы пытаетесь впихнуть странные языковые конструкции, не прудусмотренные средой, в очень интересные места. С заранее известным результатом.
...
Рейтинг: 0 / 0
Создание переменных
    #38895473
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/\/\/\/\/\/\AndyKuvaldin,

Расскажите, какую задачу Вы хотите решать. Может быть следует рассмотреть задачу с более высокого уровня.

Прямо сейчас Вы пытаетесь впихнуть странные языковые конструкции, не прудусмотренные средой, в очень интересные места. С заранее известным результатом.

Задача: объявить переменную a типа integer, задать ей значение. объявить переменную b типа integer, задать ей значение. объявить переменную c типа integer и записать в неё результат сложения 2 переменных a и b. после чего вывести на экран значения всех 3 переменных.
Сделать это в рамках pgAdmin III в SQL Editor.

Например в MS SQL это выглядело бы следующим образом:
declare @a int;
declare @b int;
declare @c int;
set @a = 1;
set @b = 2;
set @c = @a + @b;
select @a; select @b; select @c;
...
Рейтинг: 0 / 0
Создание переменных
    #38895481
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndyKuvaldin,

оператор DO и использование Pl/pgsql
просто в sql переменных в postgreSQL нет (и я с большим трудом себе могу представить ситуацию когда мне нужны переменные а не DO+pl/pgsql)

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Создание переменных
    #38895511
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukAndyKuvaldin,

оператор DO и использование Pl/pgsql
просто в sql переменных в postgreSQL нет (и я с большим трудом себе могу представить ситуацию когда мне нужны переменные а не DO+pl/pgsql)

--Maxim Boguk
www.postgresql-consulting.ru

Если не трудно как переписать выше указанные код с использованием оператора do.
...
Рейтинг: 0 / 0
Создание переменных
    #38895522
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukAndyKuvaldin,

оператор DO и использование Pl/pgsql
просто в sql переменных в postgreSQL нет (и я с большим трудом себе могу представить ситуацию когда мне нужны переменные а не DO+pl/pgsql)

--Maxim Boguk
www.postgresql-consulting.ru

Вот я например смотрю ссылку http://www.techonthenet.com/postgresql/declare_vars.php
Там синтаксис объявления переменной точно так же как пишу я но почему то не работает.
...
Рейтинг: 0 / 0
Создание переменных
    #38895579
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin,

Потому что Вы смотрите в какое-то странное место.
Смотреть нужно сюда .
По поводу анонимного блока (оператора DO) смотреть нужно сюда . Там же есть развернутый пример.

Кстати, где у PG находится экран, да и вообще что это такое?
...
Рейтинг: 0 / 0
Создание переменных
    #38895629
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/\/\/\/\/\/\AndyKuvaldin,

Потому что Вы смотрите в какое-то странное место.
Смотреть нужно сюда .
По поводу анонимного блока (оператора DO) смотреть нужно сюда . Там же есть развернутый пример.

Кстати, где у PG находится экран, да и вообще что это такое?
Подключившись к базе на панели приборов открывается доступ к значку "лупы с надписью внутри SQL". Там есть возможность написания простейших запросов как к базе данных к которой непосредственно подключен в данный момент так и просто какие то вещи предусмотренные T-SQL.
...
Рейтинг: 0 / 0
Создание переменных
    #38895634
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
do $$ declare a int;
begin
set a = 1;
edn$$;

select a;

При таком синтаксисе написания кода выдаётся ошибка типа:
ОШИБКА: неожиданный конец определения функции в конце
LINE 4: edn$$;
^
********** Ошибка **********

ОШИБКА: неожиданный конец определения функции в конце
SQL-состояние: 42601
Символ: 43
...
Рейтинг: 0 / 0
Создание переменных
    #38895714
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin <>
Вот я например смотрю ссылку http://www.techonthenet.com/postgresql/declare_vars.php
Там синтаксис объявления переменной точно так же как пишу я но почему то не работает.
начнём от печки : по ссылке написано буквально:
авторThe syntax to declare a variable in PostgreSQL is:

Код: plaintext
DECLARE variable_name [ CONSTANT ] datatype [ NOT NULL ] [ { DEFAULT | := } initial_value ]

-- это буквально неверно. Поскольку это синтаксис объявления пеерменной не в postgreSQL, а в коннкретном процедурном языке, под названием plpgsql. В PostgreSQL на процедурных языках пишутся хранимые процедуры (==функции) , частным случаем которых являются "анонимные блоки" (без параметрически функции, returning void), вызываемые посредством SQL оператора DO.

Т.е. в уважающем себя букваре должно быть что-то типа
авторThe syntax to declare a variable in plpgsql functions (or in plpgsql anonimous blocks) in PostgreSQL is: blahblahblah


Пока вы не поймете, что вы все время в разных контекстах -- вы будете мыкаться.

отличие от mssql в том -- что там всё (если верно помню) -- TSQL, и внутри процедур, и снаружи. и он -- один.


Через SET / set_config вам доступно установление переменных сеанса, которые вычитываются с current_setting()-ом

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT set_config('my.test', 'test, my', false);
--"test, my"
SELECT current_setting('my.test');
--"test, my"
-- использование:
SELECT 1 WHERE  current_setting('my.test') = 'test, my';
--1 


всё это вы могли для себя выяснить поиском, как предлагалось.


За пределами функций объявленные в них переменные не видны.
...
Рейтинг: 0 / 0
Создание переменных
    #38895729
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin<>
Язык SQL Postgre. Среда SQL Editor в pgAdmin III.
СУБД называется postgres-ql. (как наследник ingres)
язык же называется просто "SQL" (его Postgresql-ный диалект).
...
Рейтинг: 0 / 0
Создание переменных
    #38895781
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эттаAndyKuvaldin<>
Язык SQL Postgre. Среда SQL Editor в pgAdmin III.
СУБД называется postgres-ql. (как наследник ingres)
язык же называется просто "SQL" (его Postgresql-ный диалект).

Ежу понятно. Но все конструкции, которые вы описали, они не о чем. Вы льёте воду не желая отвечать на конкретный поставленный вопрос. Вы начинаете рассказывать сказки, которые понятны, но не дают сложить 2 числа и вывести на экран их сумму....
...
Рейтинг: 0 / 0
Создание переменных
    #38895835
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
do $$ declare a int;
begin
select 2 into a;
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
select * from public.services s where s.nzp_serv = a
END $$;

select * from tmp_table;
DROP TABLE IF EXISTS tmp_table;

Подскажите в чём ошибка:
ОШИБКА: неожиданный конец определения функции в конце
LINE 7: END $$;
^
********** Ошибка **********

ОШИБКА: неожиданный конец определения функции в конце
SQL-состояние: 42601
Символ: 165
...
Рейтинг: 0 / 0
Создание переменных
    #38895850
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldinэттапропущено...
СУБД называется postgres-ql. (как наследник ingres)
язык же называется просто "SQL" (его Postgresql-ный диалект).

Ежу понятно. Но все конструкции, которые вы описали, они не о чем. Вы льёте воду не желая отвечать на конкретный поставленный вопрос. Вы начинаете рассказывать сказки, которые понятны, но не дают сложить 2 числа и вывести на экран их сумму....ежу как раз понятно

а вам -- с очевидностью, нет

таки вся эта возня с импорт-замещением и дрейфом в наши края быдлокодеров из быдлоsql очень доставляют.

ниакого экрана у sql нет. это текстовый интерфейс. экраны есть у клиентов этого интерфейса, например у пжодмина.

а "ниочём" -- это "андикувалдин", и его неспособность понять, как связаны контексты , и что надо проделать в его клиенте, чтобы все это увидеть.

вам объяснили, что в SQL контексте переменных, в том виде, в каком вы привыкли в MS-SQL нет. есть возможность задать параметры сеанса [SQL], причем -- собственные (а не только предопределенные)

Код: sql
1.
2.
3.
4.
SELECT set_config('my.1', '123', false);
SELECT set_config('my.2', '321', false);
--"test, my"
SELECT current_setting('my.1')::int + current_setting('my.2')::int ;



вам объяснили, что привычные вам переменные в postgresql являются переменными функций (их объявление зависит от процедурного языка, например если процуедура написана на SQL то никаких иных переменныхх, кроме входящих параметров, у неё быть не может)

для plpgsql вам тоже приводили пример. По завершении оператора DO переменные анонимного блока не видны в SQL контексте, "выводите их на экран" пока ещё не покинули контекст plpgsql (например -- нотификацией, или же открытием курсора (что сложнее -- там еще надо охватывающей транзакцией рулить) ), иначе никак.

Ну и еще -- освойте профессию менеджера клининговой аппаратуры, желательно -- уличной. Это вам, очевидно, ближе. а водилы снегоуборщиков нынче -- вообще нарасхват
...
Рейтинг: 0 / 0
Создание переменных
    #38895851
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndyKuvaldindo $$ declare a int;
begin
select 2 into a;
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
select * from public.services s where s.nzp_serv = a
END $$;

select * from tmp_table;
DROP TABLE IF EXISTS tmp_table;

Подскажите в чём ошибка:
ОШИБКА: неожиданный конец определения функции в конце
LINE 7: END $$;
^
********** Ошибка **********

ОШИБКА: неожиданный конец определения функции в конце
SQL-состояние: 42601
Символ: 165

пропущен ;
в строке
CREATE TABLE tmp_table AS
select * from public.services s where s.nzp_serv = a ;

PS: просто a:=2 тоже работает вместо select 2 into a;


--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Создание переменных
    #38895909
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukAndyKuvaldindo $$ declare a int;
begin
select 2 into a;
DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table AS
select * from public.services s where s.nzp_serv = a
END $$;

select * from tmp_table;
DROP TABLE IF EXISTS tmp_table;

Подскажите в чём ошибка:
ОШИБКА: неожиданный конец определения функции в конце
LINE 7: END $$;
^
********** Ошибка **********

ОШИБКА: неожиданный конец определения функции в конце
SQL-состояние: 42601
Символ: 165

пропущен ;
в строке
CREATE TABLE tmp_table AS
select * from public.services s where s.nzp_serv = a ;

PS: просто a:=2 тоже работает вместо select 2 into a;


--Maxim Boguk
www.postgresql-consulting.ru

большое спасибо.
...
Рейтинг: 0 / 0
Создание переменных
    #38895943
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk

do $$ declare a decimal(16,6); b decimal(16,6);
c decimal(16,6); tarif decimal(16,6);
payment decimal(16,6);
begin
a := 2;
b := 3;
c := b - a;

tarif = select top 1 t.tarif
from public.services s
join tagil_data.tarif t on t.nzp_serv = s.nzp_serv
where s.nzp_serv = 2
order by t.tarif desc;

payment = c * tarif;

DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table(c int);
insert into tmp_table(c)
values(payment);

END $$;

select * from tmp_table;

как присвоить переменной значение возвращаемое из таблицы в результате селекта?
И можно ли не создавая временной таблицы вывести значение переменной payment сразу? Что-то типо select payment;
...
Рейтинг: 0 / 0
Создание переменных
    #38895952
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin,

Код: sql
1.
2.
3.
4.
--tarif = select top 1 t.tarif
tarif := (select  t.tarif FROM .... LIMIT 1);
-- или
SELECT t.tarif INTO tarif FROM .... LIMIT 1;



мальчик, читай таки доку, или читай примеры -- они тут в количествах на форуме болтаются
...
Рейтинг: 0 / 0
Создание переменных
    #38895982
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldinкак присвоить переменной значение возвращаемое из таблицы в результате селекта?

Как указано в документации
AndyKuvaldinИ можно ли не создавая временной таблицы вывести значение переменной payment сразу?

Да, можно
AndyKuvaldinЧто-то типо select payment;
Нет, не так.
...
Рейтинг: 0 / 0
Создание переменных
    #38902094
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
do $$ declare a decimal(16,6); b decimal(12,2);
c decimal(16,6); d decimal(12,2);
e decimal(16,6); f decimal(16,6);
begin
a := 2,333333;
b := 3,99;
e := 3,999999;
c := a * b;
d := a * b;
f := a * e;

DROP TABLE IF EXISTS tmp_table;
CREATE TABLE tmp_table(a decimal(16,6), b decimal(12,2), c decimal(16,6),
d decimal(12,2), e decimal(16,6), f decimal(16,6));
insert into tmp_table(a, b, c, d, e, f)
values(a, b, c, d, e, f);

END $$;

select * from tmp_table;


подскажите пожалуйста в чем ошибка.
Описание ошибки:
ОШИБКА: запрос "SELECT 2,333333" вернул 2 строки
CONTEXT: функция PL/pgSQL inline_code_block, строка 5, оператор присваивание
********** Ошибка **********

ОШИБКА: запрос "SELECT 2,333333" вернул 2 строки
SQL-состояние: 42601
Контекст: функция PL/pgSQL inline_code_block, строка 5, оператор присваивание
...
Рейтинг: 0 / 0
Создание переменных
    #38902104
думаецца
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndyKuvaldin
подскажите пожалуйста в чем ошибка.
ошибка в генах. вопросы к родителям

Код: sql
1.
a := 2,333333;
...
Рейтинг: 0 / 0
Создание переменных
    #38902110
AndyKuvaldin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
думаеццаAndyKuvaldin
подскажите пожалуйста в чем ошибка.
ошибка в генах. вопросы к родителям

Код: sql
1.
a := 2,333333;



спасибо
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Создание переменных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]