>  기사  >  데이터 베이스  >  트랜잭션 구현 후 MySQL 저장 프로시저가 실패하는 이유는 무엇입니까?

트랜잭션 구현 후 MySQL 저장 프로시저가 실패하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-24 23:06:31753검색

Why is My MySQL Stored Procedure Failing After Implementing Transactions?

MySQL 저장 프로시저에서 트랜잭션 구현

데이터 신뢰성을 높이기 위해 사용자가 MySQL 저장 프로시저 내에서 트랜잭션을 구현하려고 시도했습니다. . 그러나 변경으로 인해 프로시저가 작동하지 않게 되었습니다. 문서를 참조하고 온라인으로 검색했음에도 불구하고 사용자는 오류를 식별할 수 없었습니다.

제공된 코드를 검토한 결과 두 가지 구문 오류가 있음이 분명합니다.

  1. 종료 처리기에서 쉼표 누락: SQL 예외 및 경고에 대한 종료 처리기에는 조건을 구분하는 쉼표가 있어야 합니다. 올바른 구문은 다음과 같습니다. DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING 대신 DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING.
  2. 종료 핸들러에 대한 세미콜론 누락: 종료 핸들러를 종료하는 END 문도 따라야 합니다. 다른 명령문과 마찬가지로 세미콜론으로 표시합니다. END;

이러한 구문 오류가 수정되면 프로시저가 의도한 대로 작동하여 사용자가 트랜잭션을 원활하게 구현할 수 있습니다. 수정된 코드는 다음과 유사해야 합니다.

<code class="sql">BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
    ROLLBACK;
END;

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END</code>

위 내용은 트랜잭션 구현 후 MySQL 저장 프로시저가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.