sql >> データベース >  >> RDS >> Mysql

MySQLは配列内の特定のJSONオブジェクトを更新します

    1つのオプション:

    DROP PROCEDURE IF EXISTS `sp_update_json`;
    
    DELIMITER //
    
    CREATE PROCEDURE `sp_update_json`(
      `json` JSON,
      `value` VARCHAR(255)
    )
    BEGIN
      DECLARE `array_objects` JSON DEFAULT
        REPLACE(JSON_SEARCH(`json`,
                    'all',
                    'loud',
                    NULL,
                    '$.parrot[*].volume'
                   ), 'volume', 'says');
      DECLARE `max_objects` INT UNSIGNED DEFAULT 
        JSON_LENGTH(`array_objects`);
      DECLARE `current_object` INT UNSIGNED DEFAULT 0;
      WHILE `current_object` < `max_objects` DO
        SET `json` := JSON_REPLACE(`json`, 
                               JSON_UNQUOTE(                             
                                 JSON_EXTRACT(
                                   `array_objects`,
                                   CONCAT('$[', `current_object`, ']')
                                 )
                               ), `value`);
        SET `current_object` := `current_object` + 1;
      END WHILE;
      SELECT `json`;
    END//
    
    DELIMITER ;
    
    SET @`j` := '
    {
      "cat": "meow", 
      "dog": "woof", 
      "parrot": [
        {"volume": "quiet", "says": "hello"}, 
        {"volume": "loud", "says": "polly"},
        {"volume": "loud", "says": "cracker"}
      ]
    }';
    
    CALL `sp_update_json`(@`j`, 'pretty bird');
    

    db-fiddle を参照してください。 。




    1. mysqlのINT(5)はどういう意味ですか?

    2. MySQLがインストールされていないコンピュータでMySQLDBを使用してJavaアプリケーションを実行するにはどうすればよいですか?

    3. クエリを使用して、指定された2つの日付の間の月のリストを取得するにはどうすればよいですか?

    4. SQLServerのすべてのデータベースのすべてのテーブルの列名を見つける方法