【问题标题】:Multiple actions in a single query ORACLE单个查询中的多个操作 ORACLE
【发布时间】:2014-10-16 17:31:16
【问题描述】:

我有三个通过 DBLink 远程连接的数据库,我想在这三个数据库中创建一条记录。这个问题的动态是有一家公司拥有 3 家零售店,他们可以在其中销售在其他商店中找到的商品。 item1 仅在retailstore1 中找到,item2 仅在retailstore2 中找到,依此类推。但是,一家商店可以出售当前在其中找不到的商品,因此它需要向其他商店提出请求,以检查是否有足够的库存。每当一家商店销售时,它都会在 LOG 中创建一个记录,但前提是它成功了。

这些是示例中使用的表格。

  • 零售店 #1:Items(a int), LOG(a int, b int, c int)
  • 零售店 #2:Items(b int), LOG(a int, b int, c int)
  • 零售店 #3:Items(c int), LOG(a int, b int, c int)

现在,我想在三个商店的 LOG 中记录之前检查库存中是否有足够的商品,但这必须在单个查询或存储过程中完成,或者通过必要的步骤来实现。限制是数据库需要打开一次,执行,关闭,不能更多。

【问题讨论】:

  • 注意。如果你知道如何做一个方法,请帮助我。它不必是使用所需语法的完整答案。只是想法。谢谢。
  • 我无法理解您的确切问题以及您的架构。如果你想要一个回应,你会想要充实这个问题。一些建议:您使用的是什么版本的 Oracle?您如何检查某个项目是否有库存(您描述的项目表中没有足够的信息)。 LOG 表的目的是什么 - 为什么有三列?您需要显示数据流的示例。如果没有这些,请阅读两阶段提交 (docs.oracle.com/cd/B19306_01/server.102/b14231/ds_txnman.htm)

标签: sql oracle database-security


【解决方案1】:

听起来您想要的是一个显示哪个商店存货的查询,所以当店员进行查找时,它会显示该项目、商店和剩余数量。一种方法可能是使用联合,这样如果您传入项目编号的过程(不知道它存在的位置),您将像这样查询: (p_item IN NUMBER) -- 这是传入的参数,带有所需的项目编号

select item1, store1, qty1, 0 item2, 0 store2, 0 qty2, 0 item3, 0 store3, 0 qty3
from store1
where item1 = p_item
union all
select 0, 0, 0, item2, store2, qty2, 0, 0, 0 
from store2
where item2 = p_item
union all
select 0, 0, 0, 0, 0, 0, item3, store3, qty3 
from store3
where item3 = p_item

这应该只返回 1 行,其中的值不是 0,并且会告诉你它在哪里。

然后,更新可以使用 if 语句或 case 语句,根据在哪个项目/商店组合中找到相应的商店来更新相应的商店。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2011-09-19
    • 2015-07-10
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多