Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219

Сделать отчет о сданных студентом экзаменах

02.01.2011, 17:35. Показов 2373. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задание:
Сделайте процедуру, которая принимает на вход один параметр(фамилия студента) и выводит информацию о сданных студентом экзаменах в виде:
Code
1
2
3
4
5
ФИО       Дисциплина  Оценка   Дата           Примечания
Петров      Математика    5  20.1.2008
            Физика        4  22.1.2008
            Химия         2  25.1.2008 
            Химия         3  27.1.2008         Пересдача
Пока сделал так:
Oracle 11 SQL
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
CREATE OR REPLACE
PROCEDURE get_mark(
    v_name IN VARCHAR2)
AS
  g_name VARCHAR2(30) :=v_name;
TYPE progress
IS
  RECORD
  (
    surname студенты.фамилия%TYPE,
    subject дисциплины.название%TYPE,
    mark успеваемость.оценка%TYPE,
    rdate успеваемость.дата%TYPE
  );
  rec progress;
  CURSOR cur_surname
  IS
    SELECT
      фамилия,
      дисциплины.название,
      оценка,
      дата
    INTO
      rec
    FROM
      студенты
    INNER JOIN успеваемость
    ON
      студенты.номер_студента=успеваемость.номер_студента
    INNER JOIN дисциплины
    ON
      успеваемость.номер_дисциплины=дисциплины.номер_дисциплины
    WHERE
      фамилия=v_name
    ORDER BY
      4;
BEGIN
  dbms_output.put_line('ФИО '||'Дисциплина '||'Оценка '||'Дата ');
  OPEN cur_surname;
  LOOP
    FETCH
      cur_surname
    INTO
      rec;
    EXIT WHEN cur_surname%notfound;
    dbms_output.put_line(g_name||' '||rec.subject||' '||rec.mark||' '||
    rec.rdate);
    g_name:=' ';
  END LOOP;
  CLOSE cur_surname;
END;
Но выводит криво:
Oracle 11 SQL
1
EXECUTE get_mark('Усов');
Code
1
2
3
4
5
ФИО Дисциплина Оценка Дата 
Усов Математика 5 12.06.99
  Экономика 2 13.06.99
  Экономика 3 15.06.99
  Менеджмент 4 18.06.99
Вопроса два:
1. Как настроить отступы(чтобы красиво выводил)?
2. Как избавиться от переменной g_name VARCHAR2(30) :=v_name;? Входной параметр обязательно должен быть IN.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2011, 17:35
Ответы с готовыми решениями:

Определите структуру Spisok для представления записи информации о сданных студентом экзаменах
Определите структуру SPISOK для представления записи информации о сданных студентом экзаменах (фамилия студента, число экзаменов, массив...

Массив записей: Задан набор сведений об экзаменах, сданных студентами за последние несколько лет
необходимо составить программу на паскале, осуществляющую заполнение массива записей указанного содержания и структуры. Осуществить...

Используя SWITCH выбрать количество сданных экзаменов
Нужна помощь в решении работы. Вводится число экзаменов N<=20. Напечатать фразу "Мы успешно сдали N экзаменов", согласован...

5
68 / 66 / 3
Регистрация: 23.08.2010
Сообщений: 195
03.01.2011, 12:35
1. LPAD, RPAD
2. Что вам мешает не использовать g_name вообще. Если вы выполняете вместо g_name:=' ', v_name:=' ' у вас "затерается" "реальное" значение (внешнее по отношению к выполняемой процедуре)?
1
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
03.01.2011, 12:47  [ТС]
Цитата Сообщение от BLEDNYKHAP Посмотреть сообщение
2. Что вам мешает не использовать g_name вообще. Если вы выполняете вместо g_name:=' ', v_name:=' ' у вас "затерается" "реальное" значение (внешнее по отношению к выполняемой процедуре)?
Oracle 11 SQL
1
2
3
...
v_name:=' ';
Error(78,5): PLS-00363: выражение 'V_NAME' не м.б. использовано как адресат назначения
Входной параметр обязательно должен быть IN.
0
68 / 66 / 3
Регистрация: 23.08.2010
Сообщений: 195
03.01.2011, 13:17
Oracle 11 SQL
1
2
3
4
5
6
WITH tab1 AS (
SELECT 'Иванов' lastname, 'Good' mark FROM dual UNION ALL
SELECT 'Петров' lastname, 'Good' mark FROM dual UNION ALL
SELECT 'Иванов' lastname, 'Bad' mark FROM dual UNION ALL
SELECT 'Сидоров' lastname, 'Bad' mark FROM dual)
SELECT DECODE(ROWNUM,1,lastname,''), mark FROM tab1 WHERE lastname = 'Иванов';
decode(rownum,1,lastname,'')
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
03.01.2011, 15:06  [ТС]
BLEDNYKHAP, Вы не могли бы прокомментировать ваш ответ.
0
68 / 66 / 3
Регистрация: 23.08.2010
Сообщений: 195
03.01.2011, 15:40
Цитата Сообщение от st_dent Посмотреть сообщение
BLEDNYKHAP, Вы не могли бы прокомментировать ваш ответ.
Для набора данных
Oracle 11 SQL
1
2
3
4
5
WITH tab1 AS (
SELECT 'Иванов' lastname, 'Good' mark FROM dual UNION ALL
SELECT 'Петров' lastname, 'Good' mark FROM dual UNION ALL
SELECT 'Иванов' lastname, 'Bad' mark FROM dual UNION ALL
SELECT 'Сидоров' lastname, 'Bad' mark FROM dual)
Я строю запрос
Oracle 11 SQL
1
SELECT DECODE(ROWNUM,1,lastname,''), mark FROM tab1 WHERE lastname = 'Иванов'
Где поле фамилия будет выводиться только для первой строки
Oracle 11 SQL
1
DECODE(ROWNUM,1,lastname,'')
дословно - если результирующая строка первая (ROWNUM = 1), то выводим фамилию, иначе выводим пустую строку.

Для вашего случая это может выглядеть так
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  CURSOR cur_surname
  IS
    SELECT
      DECODE(ROWNUM,1,фамилия,''),
      дисциплины.название,
      оценка,
      дата
    INTO
      rec
    FROM
      студенты
    INNER JOIN успеваемость
    ON
      студенты.номер_студента=успеваемость.номер_студента
    INNER JOIN дисциплины
    ON
      успеваемость.номер_дисциплины=дисциплины.номер_дисциплины
    WHERE
      фамилия=v_name
    ORDER BY
      4;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.01.2011, 15:40
Помогаю со студенческими работами здесь

Нужно сделать отчет таблицей, чтобы потом открыть в Word, соответственно, тоже таблицей. Как это сделать?
В аксессе делаю отчет. Нужно сделать его таблицей, чтобы потом открыть в ворде, соответственно, тоже таблицей. Как это сделать?

Разработка информационной системы по учету основных средств, сданных в аренду
Доброго времени суток. Нужно с пустой бд разработать информационную систему по учету основных средств, сданных в аренду. Со слов : ...

как сделать отчет
работаю в access первый раз помогите разобраться как сделать отчет трудового договора с использованием полей из таблицы

1С 8.2, сделать отчет ПриходРасход
Кто может в 1С 8.2 сделать отчет ПриходРасход, который содержит (Первоначальное количество материалов, Приход, Расход и Конечный...

Сделать отчет по прибыли
Ребят,помогите пожалуйста, смотрите, есть документ прихода товаров и документ продажи товаров, нужно сделать отчет по прибыли. Так вот,в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru