创建SQL函数时如何获取外键对应的person表关联人员姓名?
解决方案
你只需要修改sf_check_lener_onmogelijk函数即可,无需调整触发器代码。错误提示的拼接逻辑本身封装在函数内部,把ID匹配姓名的查询逻辑加在函数里即可实现需求。
前置修正
首先修改原函数的语法错误:Oracle 中等值判断使用单等号=,原代码里的==属于语法错误,运行会直接报错,需要先调整。
修改后的函数代码
假设你的person表主键字段为id,人员姓名字段为naam,如果实际字段名不同可以自行调整:
create or replace FUNCTION sf_check_lener_onmogelijk (in_geleendvan IN VARCHAR2, in_geleendaan IN VARCHAR2) RETURN VARCHAR2 is resultaat VARCHAR2(255); v_persoon_naam VARCHAR2(255); BEGIN IF in_geleendvan = in_geleendaan THEN -- 用ID查询对应的人员姓名 SELECT naam INTO v_persoon_naam FROM person WHERE id = in_geleendvan; resultaat := 'Toevoegen afgebroken. Persoon ['||v_persoon_naam||'] mogen niet het zelfde zijn :( .'; ELSE resultaat := 'Normaal'; END IF; RETURN resultaat; EXCEPTION -- 处理传入的人员ID不存在的异常,避免程序直接报错 WHEN NO_DATA_FOUND THEN resultaat := 'Toevoegen afgebroken. De opgegeven persoon ID bestaat niet.'; RETURN resultaat; END;
补充说明
如果你的person表姓名是拆分为名、姓两个字段,可以修改查询语句拼接两个字段,示例:SELECT voornaam || ' ' || achternaam INTO v_persoon_naam FROM person WHERE id = in_geleendvan
虽然也可以把姓名查询逻辑写在触发器中,但会破坏校验逻辑的内聚性,后续维护成本更高,更推荐直接修改函数的方案。
内容的提问来源于stack exchange,提问作者Mathijs
相关产品推荐
相关产品推荐

