我有大学任务给我带来麻烦,我将引导您完成基本信息,以便您能够理解我的问题。
首先我有桌子:
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);
除此之外,我什么都没有,所以任何帮助都得到了很大的帮助!
提前感谢所有参与者。
答案 0 :(得分: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'));
希望它有所帮助。
答案 1 :(得分: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;
/