Снежинка - сохранить часть запроса в переменной или UDF - PullRequest
0 голосов
/ 27 марта 2020

Допустим, у меня есть большое предложение where, которое мне нужно использовать в множественных представлениях. Поэтому вместо того, чтобы писать это предложение в нескольких местах, я думаю, что могу сохранить весь этот бит в переменной, в функции UDF или в Somewhere. После этого все, что мне нужно сделать, это вызвать эту переменную / UDF в представлении. В основном сокращение базового кода.

Например

Where
'_ALL' in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
or
COLNAME in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
)

Это всего лишь 1 условие, которое я добавил здесь, у меня есть 10 таких столбцов, для которых я должен написать аналогичное условие. И мне нужно использовать этот же кусок кода в 20 разных местах.

Итак, вывод, на который я смотрю:

where $variable
     or 
where UDF()

Как мне сделать его немного менее сложным?

1 Ответ

0 голосов
/ 27 марта 2020

Вы не можете использовать UDF таким образом. То, что может работать, если все представления ссылаются на одну и ту же базовую таблицу (таблицы), создает эти представления вне представления с первоначальным предложением where. Примерно так:

create or replace view base_view as 
select * from base_table
Where
'_ALL' in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
or
COLNAME in 
(select distinct col1 from tablename
where ID = CURRENT_USER())
)

Затем вы можете создавать виды поверх этого базового вида:

create or replace view new_view
as
select * from base_view where ....
...