将PLSQL代码转换为函数并在SELECT语句中调用获取供应商编号
转换后的PL/SQL函数及调用方法
我帮你把这段PL/SQL代码改成了能直接在SELECT语句里调用的函数,完全贴合你的需求——通过ap_supplier_sites_all的vendor_site_id获取ap_suppliers里对应的供应商编号(segment1字段),还保留了从gecm_dff_ext表attribute52字段提取前6位的逻辑。
函数代码
CREATE OR REPLACE FUNCTION get_supplier_segment1(p_vendor_site_id IN NUMBER) RETURN VARCHAR2 IS v_ret_val VARCHAR2(30); v_sup_gsl VARCHAR2(30); v_vendor_id NUMBER; BEGIN -- 从供应商站点表拿到对应的vendor_id SELECT vendor_id INTO v_vendor_id FROM ap_supplier_sites_all WHERE vendor_site_id = p_vendor_site_id; -- 提取DFF表attribute52字段的前6位内容 SELECT SUBSTR(attribute52, 1, 6) INTO v_sup_gsl FROM gecm_dff_ext -- 这里默认用vendor_id关联DFF表,要是你的实际关联字段不一样,记得改这里的WHERE条件 WHERE vendor_id = v_vendor_id; -- 获取对应供应商的segment1编号 SELECT segment1 INTO v_ret_val FROM ap_suppliers -- 同样,要是你需要用提取的前6位内容来关联供应商表,替换这里的条件就行 WHERE vendor_id = v_vendor_id; RETURN v_ret_val; -- 加了异常处理,避免查不到数据或者出错时整个查询挂掉 EXCEPTION WHEN NO_DATA_FOUND THEN RETURN '未找到对应供应商'; WHEN OTHERS THEN RETURN '错误信息: ' || SQLERRM; END; /
怎么调用这个函数?
直接在SELECT语句里用就行,举两个实用例子:
批量查询所有供应商站点对应的供应商编号
SELECT vendor_site_id, get_supplier_segment1(vendor_site_id) AS supplier_code FROM ap_supplier_sites_all;
查询单个vendor_site_id对应的供应商编号
SELECT get_supplier_segment1(1000000123) AS supplier_code FROM DUAL;
小提醒
我在函数里假设了表之间的关联逻辑(比如用vendor_id关联gecm_dff_ext和供应商表),要是你的实际业务里关联字段不一样,记得修改对应的WHERE条件哦。另外异常处理部分可以根据你的需求调整返回的提示内容。
内容的提问来源于stack exchange,提问作者Pasha Md
相关产品推荐
相关产品推荐

