IT

will IF SIGNAL SQLSTATE in mariadb exit stored procedure?

itgroup 2023. 10. 30. 20:53
반응형

will IF SIGNAL SQLSTATE in mariadb exit stored procedure?

I don't quite understand how MariaDB signals work.

문자열을 입력하는 저장 프로시저가 있습니다.저는 그 문자열을 유효한 문자로 테스트하고 있습니다.유효하지 않은 문자가 발견되면 오류가 유효하지 않다는 신호를 보내고 싶습니다.저장 프로시저가 다음과 같은 경우 즉시 종료됩니까?SIGNAL SQLSTATE '......' SET MESAGE_TEXT='......'키웠나요?아니면 신호를 보내기 전에 절차를 완료하는 건가요?

그냥 사용할때IF...THEN그것은 효과가 없는 것처럼 보이는 진술.

CREATE PROCEDURE `testP`()
BEGIN
IF testStringSecurity('he;llo world') != 0 THEN
  SELECT 'INVALID CHARACTERS';
END IF;
SELECT 'GOOD TO GO'; 
END;

항상 돌아옵니다.GOOD TO GO. 포장을 해주셔야 할 것 같습니다.IF ... THEN ... ELSE유효한 사례를 얻기 위해 그렇게 합니다.신호를 설정하는 것은 다르지만요.

CREATE PROCEDURE `testP`()
BEGIN
IF testStringSecurity('he;llo') != 0 THEN
  SELECT 'INVALID CHARACTERS';
ELSE
  SELECT 'GOOD TO GO';
END IF;
END

A를 사용.SIGNAL실행을 즉시 중단하는 것 같습니다.

CREATE PROCEDURE `testP`()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, 
      @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT; 
        SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text); 
        SELECT @full_error;
END;
DECLARE EXIT HANDLER FOR NOT FOUND
BEGIN
  SELECT CONCAT('ERROR: ',@str,' RETRUNED NOT FOUND EXCEPTION.');
END;
IF testStringSecurity('he;llo') != 0 THEN
    SIGNAL SQLSTATE '42000'
      SET MESSAGE_TEXT = 'ERROR: Invalid string';
END IF;

SELECT 'GOOD TO GO';
END

돌아온다'ERROR 1644 (42000): ERROR: Invalid string'

ReferenceURL : https://stackoverflow.com/questions/45677080/will-if-signal-sqlstate-in-mariadb-exit-stored-procedure

반응형