我在 Oracle 中创建了一个存储过程。该过程编译成功,没有错误。该过程有 3 个更新查询,更新 3 个表“TBLHOTEL”、“TBLHOTELDETAIL”和“TBLHOTELFARE”。
在每个 Update 语句之后,变量successCnt1 递增以获取成功插入查询的数量。最后将successCnt1赋值给successCnt来存储最终结果。如果在任何查询中发生异常,则将其设置为 0 ,表示没有发生插入。
问题是没有异常发生,数据库也没有发生更新。
这是我的代码:
架构:
TBLHOTEL 架构: {DATE1 (DATE) , ACROOMS (NUMBER) , NACROOMS (NUMBER), HOTELID (VARCHAR2(10)) }
TBLHOTELFARE 模式: {HOTELID (VARCHAR2(10)), CLASS (VARCHAR2(5)), FARE (NUMBER)}
TBLHOTELDETAIL 模式: {HOTELID (VARCHAR2(10)) , PLACE (VARCHAR2(15)) , HOTELNAME (VARCHAR2(15)) }
程序:
CREATE OR REPLACE PROCEDURE TableUpdateByParameter (acrooms in number,
nacrooms in number,
date1 in date,
hotelid in varchar2,
fare in number,
place in varchar2,
hotelname in varchar2,
class in varchar2,
successCnt out number) IS
successCnt1 number(6) NOT NULL := 0;
rowUpdated1 number(6) NOT NULL := 0;
rowUpdated2 number(6) NOT NULL := 0;
rowUpdated3 number(6) NOT NULL := 0;
BEGIN
SAVEPOINT before;
UPDATE tblhotel
SET acrooms = acrooms, nacrooms = nacrooms
WHERE date1 = (to_date(date1, 'mm/dd/yyyy'))
AND hotelid = 'hotelid' ;
rowUpdated1 := SQL%RowCount;
successCnt1 := successCnt1 + 1;
dbms_output.put_line('Successful Insertion tblhotel. count ='||successCnt1);
dbms_output.put_line('Successful Insertion tblhotel. Row Updated ='||rowUpdated1);
UPDATE tblhoteldetail
SET place = 'place', hotelname = 'hotelname'
WHERE hotelid = 'hotelid' ;
rowUpdated2 := SQL%RowCount;
successCnt1 := successCnt1 + 1;
dbms_output.put_line('Successful Insertion tblhoteldetail. count ='||successCnt1);
dbms_output.put_line('Successful Insertion tblhoteldetail. Row Updated= '||rowUpdated2);
UPDATE tblhotelfare
SET fare = fare
WHERE hotelid = 'hotelid'
AND class = 'class';
rowUpdated3 := SQL%RowCount;
successCnt1 := successCnt1 + 1;
successCnt := successCnt1;
COMMIT;
dbms_output.put_line('Successful Insertion tblhotelfare. count ='||successCnt);
dbms_output.put_line('Successful Insertion tblhotelfare. Row Updated= '||rowUpdated3);
EXCEPTION
WHEN Others THEN
successCnt1 := 0;
successCnt := successCnt1;
dbms_output.put_line('An error has occured. count ='||successCnt);
ROLLBACK TO before;
END;
来电声明
DECLARE
C number;
BEGIN
TableUpdateByParameter (140,200,TO_DATE('03/24/2013','MM/DD/YYYY'),'H1',3000,'GANGTOK','TRIPTI','AC',C);
END;
数据库管理系统输出:
Successful Insertion tblhotel. count =1
Successful Insertion tblhotel. Row Updated =0
Successful Insertion tblhoteldetail. count =2
Successful Insertion tblhotel. Row Updated =0
Successful Insertion tblhotelfare. count =3
Successful Insertion tblhotel. Row Updated =0
请帮我找出问题所在。如果需要额外的信息,请告诉我。