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

Firebird跨数据库调用存储过程返回无结果集问题求助

Firebird跨数据库调用存储过程返回无结果集问题求助

嗨,各位Firebird大佬,我碰到一个头疼的问题想请教下:我需要在当前数据库的存储过程里调用另一个远程数据库的存储过程,拿到它的结果集来做后续处理,但每次调用都返回空行,就像目标表完全没有数据一样。

先给大家看下两个存储过程的代码:

源数据库中的存储过程(被调用方)

CREATE OR ALTER PROCEDURE get_scanner_active_tags_by_hh_type (
    scannerreferenceid TYPE OF COLUMN scanners.referenceid,
    hourtype TYPE OF COLUMN tagscannerpairings.hourtype
)
RETURNS (
    tagid TYPE OF COLUMN tagscannerpairings.tagid
)
AS
BEGIN
    FOR SELECT tagid
        FROM tagscannerpairings tsp JOIN scanners so ON tsp.scannerreferenceid = so.referenceid
        WHERE EXISTS (
            SELECT *
            FROM scanners si
            WHERE TRIM(TRAILING FROM si.referenceid) = TRIM(TRAILING FROM tsp.scannerreferenceid) 
              AND si.referenceid = :scannerreferenceid) 
          AND ison = 'T' 
          AND hourtype = :hourtype
        ORDER BY tagid
        INTO :tagid
    DO
        SUSPEND;
END

当前数据库中的问题存储过程(调用方)

CREATE OR ALTER PROCEDURE write_hh_records (
    scannername vchar30_req,
    hh_type hour_type
)
RETURNS (
    tagid INTEGER
)
AS
BEGIN
    FOR EXECUTE STATEMENT ('EXECUTE PROCEDURE get_scanner_active_tags_by_hh_type(:scanner, :hh);') 
        (scanner := :scannername,  hh := :hh_type)
        AS USER '<user>'
        PASSWORD '<password>'
        ROLE '<role>'
        ON EXTERNAL 'xx.xx.x.xx/3050:Config'
        INTO :tagid
    DO
        SUSPEND;
END

我已经确认源数据库里的get_scanner_active_tags_by_hh_type单独执行是能返回正确结果的,但通过write_hh_records跨库调用就完全拿不到数据。我自己排查了一些方向,但没找到问题所在,想请大家帮忙分析下可能的原因,或者给点排查的思路?

比如会不会是跨库调用时的参数传递有类型匹配问题?或者权限、连接字符串的配置有疏漏?

备注:内容来源于stack exchange,提问作者Anthony Voronkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:27:59