【发布时间】:2022-12-11 11:51:04
【问题描述】:
我想创建一个 PL/SQL 函数,根据姓名从现有表“家谱”(Familienbaum) 中计算任何人的年龄。该表具有所需的值 Name、BirthYear (Geburtsjahr)、YearOfDeath (Sterbejahr) 等。
现在我想用两种方式计算这个人的年龄:
- 如果 Person 有 YearOfDeath,则应从 YearofDeath 中减去 BirthYear 来计算
- 如果人员没有 YearOfDeath,则应从 Oracle SQL Server 的当前系统年份中减去 BirthYear
到目前为止,我已经尝试使用 SELECT INTO 子句来声明从表 Family Tree (Familienbaum) 计算所需的变量:
CREATE OR REPLACE FUNCTION BerechneAlter(Person VARCHAR2) RETURN INTEGER IS BEGIN SELECT Name, Sterbejahr, Geburtsjahr FROM Familienbaum WHERE Person = Name; RETURN (CASE WHEN Sterbejahr IS NULL THEN (year(curDate()) - Geburtsjahr) WHEN Sterbejahr IS NOT NULL THEN (Sterbejahr - Geburtsjahr) END); END BerechneAlter;SELECT INTO 子句给我带来了很多问题,有人知道语法中需要更改什么吗?
我也尝试过使用游标,但它似乎比需要的更复杂:
create or replace FUNCTION BerechneAlter(Person VARCHAR2) RETURN INTEGER IS Sterbejahr INTEGER; Geburtsjahr INTEGER; CURSOR SJ IS SELECT familienbaum.sterbejahr FROM familienbaum WHERE familienbaum.name=Person; CURSOR GJ IS SELECT familienbaum.geburtsjahr FROM familienbaum WHERE familienbaum.name=Person; BEGIN OPEN SJ; FETCH SJ INTO Sterbejahr; CLOSE SJ; OPEN GJ; FETCH GJ INTO Geburtsjahr; CLOSE GJ; RETURN (CASE WHEN Sterbejahr IS NULL THEN (2022 - Geburtsjahr) WHEN Sterbejahr IS NOT NULL THEN (Sterbejahr - Geburtsjahr) END); END BerechneAlter;
【问题讨论】:
标签: function plsql select-into