单个查询ORACLE中的多个操作

时间:2014-10-16 17:31:16

标签: sql oracle database-security

我有三个数据库通过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:项目(c int),LOG(a int,b int,c int)

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

1 个答案:

答案 0 :(得分:0)

听起来你想要的是一个查询,显示哪个商店存储该项目,所以当职员进行查找时,它会显示项目,商店和数量左侧。一种方法可能使用联合,例如,如果您传入项目编号的过程(不知道它存在于何处),您将查询如下: (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语句根据找到的项目/商店组合更新相应的商店。