P********R 发帖数: 1691 | 1 请问下面的code有问题么? UPDATE段能不能改得更短些?
谢谢!
DECLARE
v_Partid INVENTORY.partid%TYPE := &1;
v_Qty ORDERITEMS.qty%TYPE := &2;
v_Counter NUMBER := 0;
EnteredQuantityIsZero EXCEPTION;
StockQuantityIsNotEnough EXCEPTION;
BEGIN
--Verify that the quantity is more than zero.
IF v_Qty = 0 THEN
RAISE EnteredQuantityLessThenOne;
END IF;
--update INVENTORY.
UPDATE INVENTORY
SET stockqty = (SELECT INVENTORY.stockqty - v_q... 阅读全帖 |
|
c*****d 发帖数: 6045 | 2 UPDATE INVENTORY
SET stockqty = (SELECT INVENTORY.stockqty - v_qty
FROM INVENTORY
WHERE INVENTORY.partid = v_Partid)
WHERE partid = v_Partid;
不就等价于
UPDATE INVENTORY
SET stockqty = stockqty - v_qty
WHERE partid = v_Partid; |
|
B*****g 发帖数: 34098 | 3 我个人认为学习解决问题的方法远比学习一个知识点重要得多。
以你写的code为例,大家来探讨一下:
UPDATE INVENTORY
SET stockqty = (SELECT INVENTORY.stockqty - v_qty
FROM INVENTORY
WHERE INVENTORY.partid = v_Partid)
WHERE partid = v_Partid;
这个你自己看着都觉得别扭,怎么办?当然,去问会的同学也是一种方法,但肯定不是
最好的。
学习第一大法,***读文档***
找到oracle 11gR2的关于update的文档(怎么找到文档的?晕倒)。
http://docs.oracle.com/cd/E11882_01/server.112/e17118/statement
一共没几行,里面已经给出例子能解决你的问题。
如果你仔细阅读这篇文档,你会发现你的code还可以继续优化。基本上就解决了另外一
个问题,为什么update后还要再用一... 阅读全帖 |
|