You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:06:07