Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2018, 00:44   #1
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию написать функцию, определяющую пол продавца. Используя функцию, вывести продавцов - мужчин

Здравствуйте!!! Помогите мне подкорректировать код, (написать функцию, определяющую пол продавца. Используя функцию, вывести продавцов - мужчин.) Написал код, но этот код сказали неверный и написали такие замечания:
Ошибка в самом начале определения функции. Продавец — это запись в таблице SELLERS (одна строка). Эта строка однозначно определяется первичным ключом, т.е. ID. И задача определения пола предполагает выдать ответ ('м'/'ж') по входному параметру — id продавца. У вас же в качестве входного параметра используется строка (SEX IN VARCHAR2), что не понятно совершенно
Сам код:
Код:
CREATE OR REPLACE FUNCTION SEX(SEX IN VARCHAR2)  RETURN IS
FULL_NAME SELLERS.FULL_NAME%TYPE;
SEX SELLERS.FULL_NAME%TYPE;
N NUMBER;
G NUMBER;
CURSOR C1 IS 
SELECT FULL_NAME,SEX FROM SELLERS WHERE SEX=SEX;
BEGIN
SELECT COUNT(*) 
INTO G
FROM SELLERS
WHERE SEX=SEX;
OPEN C1;
N:=1;
WHILE N <= G LOOP
FETCH C1 INTO FULL_NAME, SEX ;
N:=N+1;
DBMS_OUTPUT.PUT_LINE(FULL_NAME);
END LOOP;
CLOSE C1;
END;
/
SHOW ERRORS;
SELECT SEX('М') FROM DUAL;
Nuc вне форума Ответить с цитированием
Старый 28.02.2018, 13:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык передай в качестве параметра id продавца и верни пол. На основании полученного пола и выдерни запросом всех продавцов этого пола
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 14:02   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

имхо, принципиально разные вещи.

Цитата:
Сообщение от Nuc Посмотреть сообщение
написать функцию, определяющую пол продавца
и
Цитата:
написать функцию, возвращающую пол продавца



p.s. а по сути я с ответом коллеги полностью согласен. Если в структуре таблицы SELLERS есть поле SEX,
то не надо ничего "определять", надо просто вернуть пол.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.02.2018, 14:06   #4
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

В таблице SELLERS нету поле SEX, как в таком случае быть?
Nuc вне форума Ответить с цитированием
Старый 28.02.2018, 14:28   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Nuc Посмотреть сообщение
В таблице SELLERS нету поле SEX, как в таком случае быть?
вот с этого момента поподробней.
а что есть?
и как Вы собираетесь определять пол?

на самом деле давным давно один мой коллега решал подобную задачу на практике. в БД нужно было проставить пол. Он выкрутился за счёт того, что в русском языке у всех женщин отчество заканчивается на "НА", а у мужчин - на "ИЧ". Но, боюсь, что это применимо только к русскому языку и при наличии полных ФИО.
Боюсь, что для "Абдул-Азиз ибн Абдуррахман ибн Фейсал Аль Сауд" или "Erich Maria Remarque" определить пол по отчеству будет напряжно
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.02.2018, 14:29   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
В таблице SELLERS нету поле SEX, как в таком случае быть?
Тебе же видней как в таблице называется поле с полом )) А это что?
Код:
SELECT FULL_NAME,SEX FROM SELLERS WHERE SEX=SEX
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 14:32   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
й как в таблице называется поле с полом )) А это что?
Код:
SELECT FULL_NAME,SEX FROM SELLERS WHERE SEX=SEX
это будет работать даже при отсутствии поля SEX в таблице, т.к. есть переменная SEX - см. параметры функции).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.02.2018, 14:39   #8
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

есть таблица
Изображения
Тип файла: png Скриншот 28-02-2018 153324.png (29.3 Кб, 126 просмотров)
Nuc вне форума Ответить с цитированием
Старый 28.02.2018, 14:48   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Поднять правила русского языка и определять по окончанию фамилии. Мало - еще и имени с отчеством. Правильность анализа не гарантирована, особенно если там будут иностранные погоняла или еще какая особенность, типа старославянских имен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 16:20   #10
Nuc
Пользователь
 
Регистрация: 18.02.2018
Сообщений: 18
По умолчанию

Как из этого запроса сделать функцию?
Код:
select r.full_name, 
case 
    when lower(substr(r.full_name, -1)) = 'ч'
       then 'Мужчина'
    when lower(substr(r.full_name, -1)) = 'а'
        then 'Женщина'
    end gender
from sellers r
where 1=1
and lower(substr(r.full_name, -1)) = 'ч';
в качестве входного параметра взять full_name?

или по-другому этот запрос надо написать?
Nuc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать не рекурсивную функцию, используя стек Max00766 Общие вопросы C/C++ 12 21.03.2016 06:47
[Язык LISP] Используя функцию DEFUN, определить функцию DemonXZ Помощь студентам 0 09.06.2013 18:10
[LISP] Используя функцию DEFUN, определить функцию f (a x) DemonXZ Помощь студентам 0 21.05.2013 22:14
Написать функцию булевского(целого) типа, определяющую упорядоченность массива целых чисел Anando Паскаль, Turbo Pascal, PascalABC.NET 16 23.09.2011 13:26