Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите мне, люди добрые!  [new]
САНЯЯ
Member

Откуда:
Сообщений: 1
Всем знатокам привет! Я мало что пнимаю, нужна ваша помощь! Надо сделать в 8-й версии вот такое задание:
Написать функцию F_CNT_TOPS4EMP, которая вычисляет число проведенных экскурсий указанным по коду сотрудником за указанный период времени (3 входных параметра). Вызвать функцию из процедуры P_CNT_TOPS4EMP, запрашивающей код сотрудника и необходимые даты, выводящей в текстовый файл CNT_TOPS4EMP.TXT результат в виде следующей строки (с пояснительным текстом между значениями): фамилия сотрудника, инициалы, даты с-по, количество экскурсий. В качестве результата предъявить исходные тексты подпрограмм и продемонстрировать результаты их работы на тестовых данных в таблицах EMP, SQUARE

Это мой. но неверный вариант :(
SET ECHO OFF;
ACCEPT f_date1 char PROMPT 'Введите дату с например 27/11/06: ';
ACCEPT f_date2 char PROMPT 'Введите дату по например 03/12/06: ';
ACCEPT f_emp_id Number PROMPT 'Введите код сотрудника: ';
Spool d:\Orauser\CNT_TOPS4EMP.TXT
SELECT 'За период с '||'&f_date1'|| 'по ' || '&f_date2'
From SQUARE
SELECT 'Фамилия: '|| emp_f_name from emp where emp_id=&f_emp_id;
SELECT 'Инициалы: '|| emp_letters from emp where emp_id=&f_emp_id;
SELECT 'За период с '|| to_char('&f_date1') || ' по ' || to_char('&f_date2') from dual;
SELECT 'Количество экскурсий: '|| to_char (F_CNT_TOPS4EMP('&f_emp2_id','&f_date1','&f_date2')) from dual;
FROM SQUARE
WHERE emp_id='&f_emp_id';
Spool off
SET ECHO ON;

Заранее благодарен!
26 дек 06, 23:32    [3585666]     Ответить | Цитировать Сообщить модератору
 Re: Помогите мне, люди добрые!  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
Ваш препод немного не в теме. Иначе он не дал бы задание написать в Oracle процедуру, что-то запрашивающую и что-то выводяющую в файл - поскольку для организации user interface'а существуют клиентские приложения. То что вы привели - не процедура, а скрипт для SQL*Plus.

По вашему скрипту:
1) напишите сначала функцию F_CNT_TOPS4EMP, текст которой вами вообще не приведет, а ее написание и является по сути главной частью вашего задания.
2)
SELECT 'За период с '|| to_char('&f_date1') || ' по ' || to_char('&f_date2') from dual;
зачем преобразовывать to_char то, что уже есть char? а вот кое-где в другом месте можно было бы и преобразовать строк с помощью to_date.
3)
SELECT 'Количество экскурсий: '|| to_char (F_CNT_TOPS4EMP('&f_emp2_id','&f_date1','&f_date2')) from dual;
FROM SQUARE
WHERE emp_id='&f_emp_id';
вы уж определитесь - from dual или from square (а может быть, from emp?)
4)
where emp_id=&f_emp_id;
...
WHERE emp_id='&f_emp_id';
интересно, почему один и тот же параметр вы в одном случае берется в кавычки, а в другом - употребляете без них?

PS: Употребляйте тэг SRC для цитирования сценариев, запросов, программ.
27 дек 06, 00:56    [3585726]     Ответить | Цитировать Сообщить модератору
 Re: Помогите мне, люди добрые!  [new]
Генадий1
Guest
Привет! Это Гена! Ты что за бред из кулька спрашиваешь, которому год! Будь серьёзнее, не смеши народ! Вот кстати я сделал то, что ты меня а прошлой недели просил! Вроде пашет

DECLARE
CURSOR c1 IS SELECT empno, job, sal FROM emp FOR UPDATE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO ...
UPDATE emp SET sal = new_sal WHERE CURRENT OF c1;
END LOOP;
27 дек 06, 01:06    [3585733]     Ответить | Цитировать Сообщить модератору
 Re: Помогите мне, люди добрые!  [new]
саша (я саняя)
Guest
ДА НУ ТЕБЯ ГЕНА, НАДо ИЗУЧАТЬ...

Спасибо уважаемый A.K.
1) У меня такая функция
CREATE FUNCTION F2_CNT_EMP4TOP
(f_top_id IN NUMBER, f_date1 IN DATE, f_date2 IN DATE)
RETURN number
IS
emp_res number(2);
BEGIN
SELECT count(S_EMP_ID)
INTO emp_res
FROM SQUARE
WHERE SQUARE.s_TOP_id=f_TOP_id AND
(s_day<=f_date2 AND
s_day>=f_date1);
RETURN (emp_res);
END F2_CNT_EMP4TOP;

2) Чесно говоря я запутался в конец во всём этом!
я понимаю. что намудрил где-то здесь:
SELECT 'За период с '||'&f_date1'|| 'по ' || '&f_date2'--------------здесь явно не закончена строка
From SQUARE
SELECT 'кол-во экскурсий ' || emp || 'составило' || char_to ( F_CNT_TOPS4EMP (&f_emp_id ,'&f_date1','dd/mm/yy'), ('&f_date2','dd/mm/yy'))
FROM SQUARE
WHERE emp_id='&f_emp_id';
Spool off
SET ECHO ON;


И ещё, где именно надо поставить to_date ?

Прошу мне помочь, Заранее БЛАГОДАРЕН!!!
27 дек 06, 01:29    [3585745]     Ответить | Цитировать Сообщить модератору
 Re: Помогите мне, люди добрые!  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
пока не станете использовать тэг (кнопку) SRC для оформления кода, смотреть это никто не будет.
27 дек 06, 10:22    [3586425]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить