вопрос по PostgresSql

kovrovec

Можно ли использовать переменные в простых запросах?
Например в функции можно написать:
CREATE OR REPLACE FUNCTION SomeFunc(integer)
RETURNS bigint AS
Declare myParam bigint;
$BODY$
select
column1 into myParam
from
table;
return myParam;
$BODY$
а вот в простом запросе использовать параметр не получается. К слову в MSSQL или MySql
можно просто написать
DECLARE @a int;
select @a = column1 from table
Может можно и в постгресе - кто-нибудь знает?
Я вот не нашел пока...

hprt

это относится к ораклу, но думаю в постгре тоже самое. Ну и еще один пункт для холивора c MSSQL :)
В общем, существует четкое разделение PL\SQL и SQL блоков - так что скорее всего нет.

kovrovec

Жаль. Спасибо.

mbolik1

что-то не понял что хотелось: использовать переменную в качестве столбца или записать результат выборки в переменную?

eduard615

нет, нельзя.
в зачем вообще это надо? я так понимаю в mysql такое извращение появилось тогда, когда он еще не поддерживал подзапросы для решения проблем select + insert/update

hprt

Для чего это надо - для отладки сложных запросов например. Чтоб не перекомпилировать каждый раз пакет с ломанием связанных - объявил переменную, присвоил ей значение и гоняешь запросы сколько надо. В MSSQL - очень удобно :) Как, кстати, в оракле подобное делать?
2 - судя по всему, ты не меня спрашивал, но тут действительно идет запись результата в переменную

mbolik1

видимо как-то так:
variable var1 NUMBER
:var1 := 1;
select column from table where a = :var1;

или так:
variable var1 NUMBER
BEGIN
:var1:=somefunction;
END;
/

это конечно только там где поддерживаются команды SQL*Plus

hprt

А как мне это сделать?

declare @a int

select @a = <мегасложная штуковина>

select * from some_table where id = @a -- тут я хочу получить результат в окне

понятно, что можно в плскл блоке сделать вывод во временную таблицу

mbolik1

Если я правильно тебя понял то так:

variable var1 number
select <что-то> into :var1 <мегасложная вещь>;
select * from some_table where id = :var1;

Переменные из sql/plus могут стоять везде где может стоять переменная pl/sql.
Обычно если хочется вывод в окно вырезают кусок кода и ставят двоеточия перед переменными pl/sql и получают переменные sql/plus.

eduard615

select ... into [temp] table
create [temp] view
не ?

hprt

ну я вроде писал...
понятно, что можно в плскл блоке сделать вывод во временную таблицу

А если прав на создание нет? Или всегда юзеру соответсвтует схема, где можно создавать? Вообще, вроде как уже ответил на мой вопрос (может и нет, но мне проверить негде :), и я ему верю)
Оставить комментарий
Имя или ник:
Комментарий: