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

如何基于指定SQL在Oracle中创建getShipmentDays存储过程?

创建getShipmentDays存储过程的解决方案

我来帮你搞定这个存储过程!其实逻辑一点都不复杂,核心就是把你传入的三个参数用在查询里,其中dateSend直接返回你传入的时间值(毕竟数据库里没这个字段,用参数填充就行)。

下面先给你MySQL的实现代码,如果你用的是SQL Server,我也会附上对应的写法:

MySQL版本存储过程

DELIMITER //

CREATE PROCEDURE getShipmentDays(
    IN p_senderPostindex VARCHAR(10),  -- 发件邮编参数
    IN p_recipientPostindex VARCHAR(10),  -- 收件邮编参数
    IN p_dateSend DATETIME  -- 传入的dateSend时间参数
)
BEGIN
    -- 查询并返回指定字段,p_dateSend直接作为dateSend列的值返回
    SELECT 
        p_dateSend AS dateSend,
        t.senderPostindex,
        t.recipientPostindex,
        d.shipment_days
    FROM TABLE t 
    INNER JOIN shipment_days d 
        ON d.first_index = t.senderPostindex  -- 这里我修正了你原SQL里的笔误,原写的是t.senderIndex,应该是senderPostindex吧?
        AND d.second_index = t.recipientPostindex 
    WHERE 
        t.senderPostindex = p_senderPostindex 
        AND t.recipientPostindex = p_recipientPostindex;
END //

DELIMITER ;

关键细节说明

  • 参数名加p_前缀是为了和表字段区分,避免混淆;
  • p_dateSend AS dateSend就是直接把传入的时间参数作为返回结果里的dateSend字段,完美解决你说的“数据库无该字段”的问题;
  • DELIMITER //是MySQL的特殊语法,用来临时改变语句分隔符,避免存储过程里的分号提前结束定义。

调用存储过程

完全按照你要求的格式调用就行:

CALL getShipmentDays('01001', '02031', '2020/05/09 15:40:00');

调用后会返回你需要的结果集,和示例一致:

dateSendsenderPostindexrecipientPostindexshipment_days
2020-05-09 15:40:0001001020315

SQL Server版本写法

如果用的是SQL Server,语法稍有不同,不需要修改分隔符:

CREATE PROCEDURE getShipmentDays
    @senderPostindex VARCHAR(10),
    @recipientPostindex VARCHAR(10),
    @dateSend DATETIME
AS
BEGIN
    SELECT 
        @dateSend AS dateSend,
        t.senderPostindex,
        t.recipientPostindex,
        d.shipment_days
    FROM TABLE t 
    INNER JOIN shipment_days d 
        ON d.first_index = t.senderPostindex
        AND d.second_index = t.recipientPostindex 
    WHERE 
        t.senderPostindex = @senderPostindex 
        AND t.recipientPostindex = @recipientPostindex;
END

调用时用:

EXEC getShipmentDays '01001', '02031', '2020/05/09 15:40:00';

小提示

如果调用后没返回结果,检查这几点:

  • 确认你的TABLE表(这个表名太通用了,记得改成实际表名)里有匹配的邮编记录;
  • 核对shipment_days表的关联字段first_index、second_index确实和主表的邮编字段对应;
  • 参数类型要和表字段一致,比如邮编如果是数字类型,就把参数改成INT。

内容的提问来源于stack exchange,提问作者German Varanytsya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:37:48