对于视图的插入删除修改而言,其实就是对视图中某张基表的DML操作,至于选择那张表,个人认为要看具体的业务逻辑
PACKAGE BODY LINES_PRIVATE IS
PROCEDURE Insert_Row is
CURSOR C IS
SELECT ROWID
FROM DEM_ORDER_LINES
WHERE ORDER_ID = INES.ORDER_ID AND
ORDER_LINE_NUM=INES.ORDER_LINE_NUM;
--要存在一条记录,数据库就自动为这条记录分配一个rowid
对rowid进行操作比对其他cloumn要快
rowid不能插入的,是oracle自动生成的
-- 这个游标的作用是当数据插入后,取得该数据的rowid
如果数据没有插入成功,则返回警告,并且为下面的修改,删除等操作
提供rowid
BEGIN
INSERT INTO DEM_ORDER_LINES
(
ORDER_ID ,
ORDER_LINE_NUM ,
LAST_UPDATE_DATE ,
LAST_UPDATED_BY ,
CREATION_DATE ,
CREATED_BY ,
LAST_UPDATE_LOGIN ,
PRODUCT_ID ,
GL_ACCOUNT_CC_ID ,
ORDERED_QUANTITY ,
ATTRIBUTE_CATEGORY ,
ATTRIBUTE1 ,
ATTRIBUTE2 ,
ATTRIBUTE3 ,
ATTRIBUTE4 ,
ATTRIBUTE5 ,
ATTRIBUTE6 ,
ATTRIBUTE7 ,
ATTRIBUTE8 ,
ATTRIBUTE9 ,
ATTRIBUTE10
)
VALUES
(
INES.ORDER_ID ,
:LINES.ORDER_LINE_NUM ,
:LINES.LAST_UPDATE_DATE ,
:LINES.LAST_UPDATED_BY ,
:LINES.CREATION_DATE ,
:LINES.CREATED_BY ,
:LINES.LAST_UPDATE_LOGIN ,
:LINES.PRODUCT_ID ,
:LINES.GL_ACCOUNT_CC_ID ,
:LINES.ORDERED_QUANTITY ,
:LINES.ATTRIBUTE_CATEGORY ,
:LINES.ATTRIBUTE1 ,
:LINES.ATTRIBUTE2 ,
:LINES.ATTRIBUTE3 ,
:LINES.ATTRIBUTE4 ,
:LINES.ATTRIBUTE5 ,
:LINES.ATTRIBUTE6 ,
:LINES.ATTRIBUTE7 ,
:LINES.ATTRIBUTE8 ,
:LINES.ATTRIBUTE9 ,
:LINES.ATTRIBUTE10
) ;
OPEN C ;
FETCH C INTO :LINES.ROW_ID ;
IF (C%NOTFOUND) THEN
CLOSE C ;
RAISE NO_DATA_FOUND ;
END IF ;
CLOSE C ;
END Insert_Row ;
PROCEDURE Lock_Row IS
Counter NUMBER ;
CURSOR C IS
SELECT
ORDER_ID ,
ORDER_LINE_NUM ,
LAST_UPDATE_DATE ,
LAST_UPDATED_BY ,
CREATION_DATE ,
CREATED_BY ,
LAST_UPDATE_LOGIN ,
PRODUCT_ID ,
GL_ACCOUNT_CC_ID ,
ORDERED_QUANTITY ,
ATTRIBUTE_CATEGORY ,
ATTRIBUTE1 ,
ATTRIBUTE2 ,
ATTRIBUTE3 ,
ATTRIBUTE4 ,
ATTRIBUTE5 ,
ATTRIBUTE6 ,
ATTRIBUTE7 ,
ATTRIBUTE8 ,
ATTRIBUTE9 ,
ATTRIBUTE10
FROM DEM_ORDER_LINES
WHERE ROWID = :LINES.ROW_ID
FOR UPDATE OF ORDER_ID,ORDER_LINE_NUM NOWAIT ;
Recinfo C%ROWTYPE ;
BEGIN
Counter := 0 ;
LOOP
BEGIN
Counter := Counter + 1 ;
OPEN C ;
FETCH C INTO Recinfo ;
IF (C%NOTFOUND) THEN
CLOSE C ;
FND_MESSAGE.Set_Name('FND','FORM_RECORD_DELETED') ;
FND_MESSAGE.Error ;
RAISE FORM_TRIGGER_FAILURE ;
END IF ;
CLOSE C ;
IF
(
((Recinfo.ORDER_ID = :LINES.ORDER_ID) OR
((Recinfo.ORDER_ID IS NULL) AND
(:LINES.ORDER_ID IS NULL))) AND
((Recinfo.ORDER_LINE_NUM = :LINES.ORDER_LINE_NUM) OR
((Recinfo.ORDER_LINE_NUM IS NULL) AND
(:LINES.ORDER_LINE_NUM IS NULL))) AND
((Recinfo.LAST_UPDATE_DATE = :LINES.LAST_UPDATE_DATE) OR
((Recinfo.LAST_UPDATE_DATE IS NULL) AND
(:LINES.LAST_UPDATE_DATE IS NULL))) AND
((Recinfo.LAST_UPDATED_BY = :LINES.LAST_UPDATED_BY) OR
((Recinfo.LAST_UPDATED_BY IS NULL) AND
(:LINES.LAST_UPDATED_BY IS NULL))) AND
((Recinfo.CREATION_DATE = :LINES.CREATION_DATE) OR
((Recinfo.CREATION_DATE IS NULL) AND
(:LINES.CREATION_DATE IS NULL))) AND
((Recinfo.CREATED_BY = :LINES.CREATED_BY) OR
((Recinfo.CREATED_BY IS NULL) AND
(:LINES.CREATED_BY IS NULL))) AND
((Recinfo.LAST_UPDATE_LOGIN = :LINES.LAST_UPDATE_LOGIN) OR
((Recinfo.LAST_UPDATE_LOGIN IS NULL) AND
(:LINES.LAST_UPDATE_LOGIN IS NULL))) AND
((Recinfo.PRODUCT_ID = :LINES.PRODUCT_ID ) OR
((Recinfo.PRODUCT_ID IS NULL) AND
(:LINES.PRODUCT_ID IS NULL))) AND
((Recinfo.GL_ACCOUNT_CC_ID = :LINES.GL_ACCOUNT_CC_ID) OR
((Recinfo.GL_ACCOUNT_CC_ID IS NULL) AND
(:LINES.GL_ACCOUNT_CC_ID IS NULL))) AND
((Recinfo.ORDERED_QUANTITY = :LINES.ORDERED_QUANTITY) OR
((Recinfo.ORDERED_QUANTITY IS NULL) AND
(:LINES.ORDERED_QUANTITY IS NULL))) AND
((Recinfo.ATTRIBUTE_CATEGORY = :LINES.ATTRIBUTE_CATEGORY) OR
((Recinfo.ATTRIBUTE_CATEGORY IS NULL) AND
(:LINES.ATTRIBUTE_CATEGORY IS NULL))) AND
((Recinfo.ATTRIBUTE1 = :LINES.ATTRIBUTE1) OR
((Recinfo.ATTRIBUTE1 IS NULL) AND
(:LINES.ATTRIBUTE1 IS NULL))) AND
((Recinfo.ATTRIBUTE2 = :LINES.ATTRIBUTE2) OR
((Recinfo.ATTRIBUTE2 IS NULL) AND
(:LINES.ATTRIBUTE2 IS NULL))) AND
((Recinfo.ATTRIBUTE3 = :LINES.ATTRIBUTE3) OR
((Recinfo.ATTRIBUTE3 IS NULL) AND
(:LINES.ATTRIBUTE3 IS NULL))) AND
((Recinfo.ATTRIBUTE4 = :LINES.ATTRIBUTE4) OR
((Recinfo.ATTRIBUTE4 IS NULL) AND
(:LINES.ATTRIBUTE4 IS NULL))) AND
((Recinfo.ATTRIBUTE5 = :LINES.ATTRIBUTE5) OR
((Recinfo.ATTRIBUTE5 IS NULL) AND
(:LINES.ATTRIBUTE5 IS NULL))) AND
((Recinfo.ATTRIBUTE6 = :LINES.ATTRIBUTE6) OR
((Recinfo.ATTRIBUTE6 IS NULL) AND
(:LINES.ATTRIBUTE6 IS NULL))) AND
((Recinfo.ATTRIBUTE7 = :LINES.ATTRIBUTE7) OR
((Recinfo.ATTRIBUTE7 IS NULL) AND
(:LINES.ATTRIBUTE7 IS NULL))) AND
((Recinfo.ATTRIBUTE8 = :LINES.ATTRIBUTE8) OR
((Recinfo.ATTRIBUTE8 IS NULL) AND
(:LINES.ATTRIBUTE8 IS NULL))) AND
((Recinfo.ATTRIBUTE9 = :LINES.ATTRIBUTE9) OR
((Recinfo.ATTRIBUTE9 IS NULL) AND
(:LINES.ATTRIBUTE9 IS NULL))) AND
((Recinfo.ATTRIBUTE10 = :LINES.ATTRIBUTE10) OR
((Recinfo.ATTRIBUTE10 IS NULL) AND
(:LINES.ATTRIBUTE10 IS NULL)))
) THEN
RETURN ;
ELSE
FND_MESSAGE.Set_Name('FND','FORM_RECORD_CHANGED') ;
FND_MESSAGE.Error ;
RAISE FORM_TRIGGER_FAILURE ;
END IF ;
EXCEPTION
WHEN APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION THEN
IF (C%ISOPEN) THEN
CLOSE C ;
END IF ;
APP_EXCEPTION.Record_Lock_Error(Counter) ;
END ;
END LOOP ;
END Lock_Row ;
PROCEDURE Update_Row IS
BEGIN
UPDATE DEM_ORDER_LINES SET
ORDER_ID=:LINES.ORDER_ID ,
ORDER_LINE_NUM=:LINES.ORDER_LINE_NUM ,
LAST_UPDATE_DATE=:LINES.LAST_UPDATE_DATE ,
LAST_UPDATED_BY=:LINES.LAST_UPDATED_BY ,
CREATION_DATE=:LINES.CREATION_DATE ,
CREATED_BY=:LINES.CREATED_BY ,
LAST_UPDATE_LOGIN=:LINES.LAST_UPDATE_LOGIN ,
PRODUCT_ID=:LINES.PRODUCT_ID ,
GL_ACCOUNT_CC_ID=:LINES.GL_ACCOUNT_CC_ID ,
ORDERED_QUANTITY=:LINES.ORDERED_QUANTITY ,
ATTRIBUTE_CATEGORY=:LINES.ATTRIBUTE_CATEGORY ,
ATTRIBUTE1=:LINES.ATTRIBUTE1 ,
ATTRIBUTE2=:LINES.ATTRIBUTE2 ,
ATTRIBUTE3=:LINES.ATTRIBUTE3 ,
ATTRIBUTE4=:LINES.ATTRIBUTE4 ,
ATTRIBUTE5=:LINES.ATTRIBUTE5 ,
ATTRIBUTE6=:LINES.ATTRIBUTE6 ,
ATTRIBUTE7=:LINES.ATTRIBUTE7 ,
ATTRIBUTE8=:LINES.ATTRIBUTE8 ,
ATTRIBUTE9=:LINES.ATTRIBUTE9 ,
ATTRIBUTE10=:LINES.ATTRIBUTE10
WHERE ROWID = :LINES.ROW_ID ;
IF (SQL%NOTFOUND) THEN
RAISE NO_DATA_FOUND ;
END IF ;
END Update_Row ;
PROCEDURE Delete_Row IS
BEGIN
DELETE DEM_ORDER_LINES
WHERE ORDER_ID = :LINES.ORDER_ID AND
ORDER_LINE_NUM=:LINES.ORDER_LINE_NUM;
IF (SQL%NOTFOUND) THEN
RAISE NO_DATA_FOUND ;
END IF ;
END Delete_Row ;
END;
本文作者:网友 来源: http://blog.csdn.net/vshirleyzhxl/archive/2008/08/01/2753412.aspx
CIO之家 www.ciozj.com 微信公众号:imciow