Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Создать функцию, определяющее пол продавца


Автор: Кли 23.2.2018, 00:06
Здравствуйте!!! Помогите мне подкорректировать код, (написать функцию, определяющую пол продавца. Используя функцию, вывести продавцов - мужчин.) Написал код, но этот код сказали неверный и написали такие замечания: 
Ошибка в самом начале определения функции. Продавец — это запись в таблице 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;

Автор: Кли 25.2.2018, 17:31
Кто-то есть живой?

Автор: Akina 25.2.2018, 18:15
Процитируйте задание. В приведённом вольном пересказе оно противоречиво.

Автор: Кли 25.2.2018, 18:23
написать функцию, определяющую пол продавца. Используя функцию, вывести продавцов - мужчин

Автор: Akina 26.2.2018, 08:14
Тогда функция будет (схематично)

Код

CREATE FUNCTION get_sex ([id | name])
RETURNS VARCHAR2
AS 
RETURN SELECT sex
       FROM sellers 
       WHERE sellers.[id | name] = [id | name] ;


А запрос на получение соответственно

Код

SELECT *
FROM sellers
WHERE get_sex([id | name]) = 'м';

Автор: Кли 26.2.2018, 17:25
У меня выползает ошибка:
Error: PLS-00103: Encountered the symbol "[" when expecting one of the following:     <an identifier> <a double-quoted delimited-identifier>    current delete exists prior 

Автор: Akina 26.2.2018, 19:00
А что непонятно в слове "схематично"?

Автор: Кли 26.2.2018, 23:52
понятно,спасибо

Автор: Кли 28.2.2018, 14:25
Как из этого запроса сделать функцию?
Код

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)) = 'ч';

Автор: Akina 28.2.2018, 22:22
Ну поскольку  Вы намерены вернуть набор записей , к тому же  состоящих из двух полей - попробуйте спросить у документации, умеет ли Оракл такое...

Автор: LSD 2.3.2018, 11:05
Цитата(Akina @  28.2.2018,  23:22 Найти цитируемый пост)
попробуйте спросить у документации, умеет ли Оракл такое... 

https://community.oracle.com/thread/888365 конечно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)