2014-01-03 3 views
0

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

Прежде всего у меня есть таблица:

CREATE TABLE Marriage (
     Id_Marriage  INTEGER, 
     Marriage_date  DATE, 
     Date_of_expiration DATE, 
     Reason_of_expiration VARCHAR2(80)  
); 

Данные в этой таблице выглядит как в примере:

ID Marriage_date Date_of_expiration Reason_of_expiration 
1 39/04/12  94/11/16   Death 

Тогда я должен создать вторую таблицу, которая будет:

CREATE TABLE Statistics (
     Year    INTEGER, --(or date perhaps?) 
     Number_of_marriages INTEGER, 
     Number_of_divorces INTEGER 
); 

И моя задача - создать процедуру, которая заполните эту таблицу с информацией. Таким образом, должно быть количество браков и разводов (или браков, закончившихся) за каждый год в табличных браках. При желании он также может печатать данные на экране, а также вставлять строки в браки.

Я действительно не смог придумать, как начать. Я предполагаю, что потребуется какое-то курсор, и я знаю, что я могу извлечь год от даты, делая что-то вроде этого:

year := SUBSTR (marriage_Date, 1, 2); 

Кроме того, я не имею ничего так на самом деле любая помощь очень apprieciated!

Заранее благодарим всех участников.

+0

Как часто эта процедура будет выполнена? Один раз или каждый год? И в какое время года? – San

+0

Честно говоря, я понятия не имею, это глупая задача uni, которая абсолютно не относится ни к одному из примеров реальной жизни. – devBem

ответ

1

Чтение вашего вопроса Я чувствую, что самый большой недостаток заключается в том, что нет необходимости создавать процедуру, по сути, нет необходимости создавать таблицу непосредственно! Интересно, какое это упражнение, где вас учат всему остальному, кроме основ проектирования баз данных, включая нормализацию. Реальные примеры жизни нигде не похожи.

Что касается вашего вопроса, так как никто не заботится о деталях исполнения, следующий код будет достаточно:

CREATE OR REPLACE PROCEDURE calculateStatistics 
IS 
BEGIN 
    DELETE FROM statistics; 
    INSERT INTO statistics 
     SELECT to_number(to_char(marriage_date, 'YYYY')) AS YEAR, 
       count(id_marriage) as number_of_marriages, 
       sum(CASE UPPER(reason_of_expiration) 
         WHEN = 'DIVORCE' THEN 1 
         ELSE 0 
        END) number_of_divorces 
     FROM marriage 
     GROUP BY to_number(to_char(marriage_date, 'YYYY')); 
END; 
/
2

Вам не нужна процедура для этого. Вы можете использовать следующий запрос:

INSERT INTO STATISTICS 
    SELECT to_number(to_char(marriage_date, 'YYYY')) YEAR, 
      count(id_marriage) number_of_marriages, 
      sum(CASE WHEN reason_of_expiration != 'Death' THEN 1 
        ELSE 0 
       END) number_of_divorces 
    FROM marriage 
    GROUP BY to_number(to_char(marriage_date, 'YYYY')); 

Надеюсь, это поможет.

+0

Да, это все хорошо, так же, как я сказал, что это моя задача - создать процедуру, как бы ни была глупая задача. Что ж. Университет. – devBem

Смежные вопросы