0

Javaメソッドからの「1,3,5,7,9,0,3」などの文字列を関数に渡し、関数がカンマで区切られた各値をIntとして返すようにしたいその後、ストアド プロシージャで後で使用されます (以下を参照)。

CREATE PROCEDURE updateLastModifiedDate(IN p_classId VARCHAR(21844), IN p_timestamp VARCHAR(21844))
    BEGIN
        SET @query = CONCAT ('UPDATE class SET LastModifiedDate = ',p_timestamp,' WHERE ClassId IN (', p_classId ,')');
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END //
DELIMITER ;

関数をどのように記述しますか?

4

1 に答える 1

1

あなたの場合、関数への入力はコンマ区切りの文字列です。ただし、MySqlには、COMMA SEPARATED文字列を分割するための組み込み関数は含まれていません(commaは区切り文字の単なる例です)。

入力を「1,3,5,7,9,0,3」と言いました。つまり、アイテムの数は7です。この数は一定である必要があります。例として挙げることができますが、アイテムの数は常に一定である必要があります。

また、mysql関数は単一の値のみを返すことができます。したがって、関数内からのみ(値を分割した後)プロシージャを呼び出す必要があります。

入力文字列には常に7つの項目が含まれ、使用される区切り文字はコンマであると仮定してmysql関数を提供しています。それ以外の場合は、関数を変更する必要があります。

DELIMITER @@

CREATE FUNCTION getCustomerFullName(commaSeparatedString VARCHAR(256))
RETURNS INT
BEGIN
  DECLARE value1 INT DEFAULT 0;
  DECLARE value2 INT DEFAULT 0;
  DECLARE value3 INT DEFAULT 0;
  DECLARE value4 INT DEFAULT 0;
  DECLARE value5 INT DEFAULT 0;
  DECLARE value6 INT DEFAULT 0;
  DECLARE value7 INT DEFAULT 0;

  IF NOT commaSeparatedString IS NULL
    THEN
          SELECT LENGTH(commaSeparatedString) - LENGTH(REPLACE(commaSeparatedString, ',', '')) INTO @commaCount;

          IF  @commaCount = 0
            THEN
                 RETURN 0;  
          ELSE
            SET value1 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 1),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 0)) + 1), ',', '');
            SET value2 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 2),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 1)) + 1), ',', '');
            SET value3 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 3),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 2)) + 1), ',', '');
            SET value4 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 4),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 3)) + 1), ',', '');
            SET value5 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 5),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 4)) + 1), ',', '');
            SET value6 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 6),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 5)) + 1), ',', '');
            SET value7 = REPLACE(SUBSTRING(SUBSTRING_INDEX(commaSeparatedString, ',', 7),LENGTH(SUBSTRING_INDEX(commaSeparatedString, ',', 6)) + 1), ',', '');

        END IF;
  END IF; 

  CALL updateLastModifiedDate(value1, value2, value3, value4, value5, value6, value7);

  RETURN 1;
END;
@@

DELIMITER ;

礼儀:

于 2013-01-26T12:20:31.477 に答える