Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / if EXISTS () then... / 9 сообщений из 9, страница 1 из 1
25.04.2006, 09:37
    #33687745
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
В скрипте хочу узнать есть ли view с заданным именем, если есть - то drop
Код: plaintext
1.
2.
3.
if (EXISTS (select * from  pg_views where viewname=view_name)) then
 drop VIEW view_name; 
end if;
пишет
Код: plaintext
ERROR:  syntax error at or near "if" у символа  1 
можно ли узнать это другим способом или только
Код: plaintext
delete from pg_views where  viewname=view_name;
?
...
Рейтинг: 0 / 0
25.04.2006, 09:47
    #33687779
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
насчет
Код: plaintext
delete from pg_views where  viewname=view_name;
погорячился -)
...
Рейтинг: 0 / 0
25.04.2006, 09:59
    #33687812
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
попробуй объявить переменную и делать в ней выборку примерно такого вида:
Код: plaintext
select count( 1 ) from pg_views where viewname=view_name
А затем анализировать значение этой переменной.
Если 0 - то представление не существует. Если 1 - то существует...

З.Ы.
Встречный вопрос - если представления на момент компиляции скрипта не будет существовать, то скомпилируется ли твой скрипт???
...
Рейтинг: 0 / 0
25.04.2006, 10:09
    #33687840
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
объявить переменную в скрипте нельзя. если можно - скажите как. придется писать функцию.-(
...
Рейтинг: 0 / 0
25.04.2006, 10:23
    #33687884
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
может просто подойдет CREATE OR REPLACE VIEW ?
...
Рейтинг: 0 / 0
25.04.2006, 10:26
    #33687891
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
drunk2объявить переменную в скрипте нельзя. если можно - скажите как. придется писать функцию.-(ТОгда расскажи, что ты вообще пытаешься сделать?
...
Рейтинг: 0 / 0
25.04.2006, 10:51
    #33687984
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
wbearможет просто подойдет CREATE OR REPLACE VIEW ?нет, если кол-во стобцов разное.
Владимор Конев ТОгда расскажи, что ты вообще пытаешься сделать? скрипт , который делает апдейт базы(change.sql). структура обновляется/пишется почти каждый день.
...
Рейтинг: 0 / 0
25.04.2006, 10:59
    #33688018
SOmni
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
Да дропай в любом случае ;-)
...
Рейтинг: 0 / 0
26.04.2006, 04:12
    #33690346
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
if EXISTS () then...
А я для удаления несложную функцию написал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create or replace function cond_drop(_type text, _name text) returns boolean
language plpgsql volatile strict
as $body$
/*
Удаление объекта БД без возбуждения ошибки в случае его отсутствия (pg8+)
Использование:
  select cond_drop(object_type, object_name);
  object_type ::= table | view | index | type | function
  Для функция нужно передать прототип полностью (с типами аргументов).
*/
begin
  if upper(_type) not in (
    'TABLE',
    'VIEW',
    'INDEX',
    'TYPE',
    'FUNCTION'
  ) then
    raise exception 'unknown type "%"', _type;
  end if;
  begin
    raise notice 'Trying drop % "%"...', _type, _name;
    execute 'DROP ' || _type || ' ' || _name;
    raise notice '% "%" dropped succesfully', _type, _name;
    return true;
  exception
    when undefined_table or undefined_function or undefined_object then
      raise notice '% "%" does not exists', _type, _name;
      return false;
  end;
end;
$body$;

--Проверка
create temporary table this_table_exists (a int);
select cond_drop('table', 'this_table_not_exists');
select cond_drop('table', 'this_table_exists');
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / if EXISTS () then... / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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