Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка на уникальность 
V
    Опции темы
Value
Дата 15.10.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 2.12.2005

Репутация: нет
Всего: нет



База PostgreSQL

пробую проверку логина на уникальность

Код

create or replace function sp_create_user (p_login varchar)
returns void
as $$
declare
    v_login varchar;
begin
    v_login := p_login;
    if v_login = admins.login or  v_login = customers.login or v_login = owners.login then 
    return;
    end if;
    EXCEPTION 
        WHEN unique_violation then
        raise notice ' caught unique violation % ', v_login;
end;
$$language plpgsql;


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

Код

select sp_create_user ('admin1');
select * from admins


выдаёт ошибку 
Код

ERROR:  missing FROM-clause entry for table "admins"
LINE 1: SELECT   $1  = admins.login or  $1  = customers.login or  $1...
                       ^
QUERY:  SELECT   $1  = admins.login or  $1  = customers.login or  $1  = owners.login
CONTEXT:  PL/pgSQL function "sp_create_user" line 5 at IF

********** Error **********

ERROR: missing FROM-clause entry for table "admins"
SQL state: 42P01
Context: PL/pgSQL function "sp_create_user" line 5 at IF


сама ошибка называктся так UNDEFINED TABLE

где я не прав обьясните пожалуйста
PM MAIL   Вверх
Magnifico
Дата 15.10.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 4
Всего: 17



Код

if exists (select login from admins where admins.login =v_login ) then бла -бла -бла 



--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Value
Дата 16.10.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 2.12.2005

Репутация: нет
Всего: нет



Это работает спасибо..
Но проверку всё равно не делает

у меня введён логин admin1 и при запросе 

Код

select sp_create_user('admin1')


ошибка не выдаётся... просто получаю пустую таблицу

а если вставить в функцию 
Код

insert into admins(login) values (v_login)


он ругается что есть поля not null (они действительно есть), но мне нужно выролнить только проверку и только поля login

Это сообщение отредактировал(а) Value - 16.10.2008, 10:49
PM MAIL   Вверх
Value
Дата 16.10.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 2.12.2005

Репутация: нет
Всего: нет



решилось так
Код

create or replace function sp_create_user (p_login varchar)
returns void
as $$
declare
    v_login varchar;
begin
    v_login := p_login;http://feeds.feedburner.com/VingradBlogs
    if exists (select login from admins where admins.login = v_login) then 
    raise exception 'login already exists';
    end if;
end;
$$language plpgsql;


немного с exception'ами не разобрался

Это правильное решение ?

Это сообщение отредактировал(а) Value - 16.10.2008, 12:58
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0694 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.