Oracle でストアド プロシージャを作成しました。プロシージャはエラーなしで正常にコンパイルされます。この手順には、3 つのテーブル「TBLHOTEL」、「TBLHOTELDETAIL」、および「TBLHOTELFARE」を更新する 3 つの UPDATE クエリがあります。
すべての 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;
DBMS 出力:
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
問題を特定するのを手伝ってください。追加情報が必要な場合は、お知らせください。