open cr_count行でエラーが発生したため、それに続く手順は機能しません。私はこの行なしでコードを実行すると細かく動作します。また、私はカーソルを使わずにクエリを書こうとしました。私はoracle sqlerrmとしてmysqlエラー・プリントを書いていませんでしたが、mysqlはその機能を持っていないと思います。MySqlストアドプロシージャは、内部カーソルのエラーのために機能しません。
delimiter $$
create procedure proc_payment(
in p_transaction_guid varchar(200),
in p_card_type_id int,
in p_card_number varchar(100),
in p_billing_address varchar(500),
in p_flight_id int,
in p_flight_date date,
in p_cabin_class_id int,
in p_identity_number varchar(200)
)
begin
declare v_count int;
declare v_payment_id int;
declare v_passenger_id int;
declare v_booking_ref_id int;
declare cr_count cursor for
select count(1)
from tbl_passenger
where identity_number = p_identity_number;
declare cr_passenger cursor for
select passenger_id
from tbl_passenger
where identity_number = p_identity_number;
open cr_count;
fetch cr_count into v_count;
close cr_count;
if v_count = 0 then
insert into tbl_passenger (
firstname,
lastname,
gender,
birthdate,
identity_number
)
select
firstname,
lastname,
gender_id,
birthdate,
identity_number
from
v_booking_transaction
where
transaction_guid = p_transaction_guid
and identity_number = p_identity_number;
select last_insert_id() into v_passenger_id;
else
open cr_passenger;
fetch cr_passenger into v_passenger_id;
close cr_passenger;
end if;
insert into tbl_payment (
card_type_id,
card_number,
payment_date,
billing_address
) values (
p_card_type_id,
p_card_number,
current_date(),
p_billing_address
);
select last_insert_id() into v_payment_id;
insert into tbl_flight_booking (
flight_id,
flight_date,
cabin_class_id,
payment_id
) values (
p_flight_id,
p_flight_date,
p_cabin_class_id,
v_payment_id
);
select last_insert_id() v_booking_ref_id;
insert into tbl_flight_passenger (
flight_id,
booking_reference_id,
passenger_id
) values (
p_flight_id,
v_booking_ref_id,
v_passenger_id
);
end$$
オープンしないでフェッチするとエラーは発生しませんか? – Uueerdo
カーソルが閉じている場合、またはオープン、フェッチ、クローズの行を削除すると、プロシージャは細かく動作します。プロシージャは、カーソル(cr_count)内の選択クエリのエラーのために動作しませんが、そのエラーは何ですか、残念ながら私did'ntは詳細を見つける。 –
エラートレースの観点から見ると、mysqlは私の意見では悪い –