Dtoをパラメータとして渡し、Springのjdbc.cでストアドプロシージャを呼び出したいと思いますか?HOW TOオブジェクトのリスト(DTO)を単一のINパラメータとしてストアドプロシージャに渡す
パラメータを設定する代わりにパラメタのようにdtoを使用してストアドプロシージャを呼び出したいのですが、パラメータが非常に多いためです。
Dtoをパラメータとして渡し、Springのjdbc.cでストアドプロシージャを呼び出したいと思いますか?HOW TOオブジェクトのリスト(DTO)を単一のINパラメータとしてストアドプロシージャに渡す
パラメータを設定する代わりにパラメタのようにdtoを使用してストアドプロシージャを呼び出したいのですが、パラメータが非常に多いためです。
現時点では、MySQLのストアドプロシージャとファンクションにオブジェクトを渡す(または返す)方法がありません。
しかし、MySQL 5.7にはJSON関数があり、varchar
パラメータを渡してJSON_EXTRACT
関数を使用して値を抽出することができます。
マニュアルのMySQL 5.7を参照してください:Functions That Search JSON Values
は、それはそう – smith
ありがとうです@スミスあなたの歓迎、受け入れるか、またはupvoteとして私の答えをマークすることを考慮してください:) –
私はあなたが私がこの
SET TypeCat = CONCAT(CONVERT('$.', CHAR(50)), T)
を行うだろう探しにどのキー変数にしようとしている場合は5.7
のMySQLでこれを行うことができました
なぜMysqlは'$.'
が二重であると考えるので、私はそれをCharとしてキャストしなければならなかった
DROP PROCEDURE IF EXISTS web.newTransaction;
CREATE PROCEDURE web.newTransaction (DATA JSON)
BEGIN
## Declare Vars ###
DECLARE done INT DEFAULT FALSE;
DECLARE TypeCat VARCHAR(255);
DECLARE s JSON;
# CURSOR 1
DECLARE T VARCHAR(255); ## Transaction
DECLARE TVT VARCHAR(255); ## TransactionValueTable
DECLARE cur1 CURSOR FOR SELECT Transaction, TransactionValueTable FROM web.TransactionType;
##### Error Handlers ####
### Error Handle for Loop ##
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
SHOW ERRORS;
ROLLBACK;
END;
DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
SHOW WARNINGS;
ROLLBACK;
END;
OPEN cur1;
START TRANSACTION;
-- Start our for loop
forLoop: LOOP
FETCH cur1 INTO T,TVT;
IF done = TRUE THEN
LEAVE forLoop;
END IF;
SET TypeCat = CONCAT(CONVERT('$.', CHAR(50)), T);
IF (SELECT JSON_CONTAINS_PATH(DATA, 'one', TypeCat) = 1)
THEN SET s =JSON_EXTRACT(DATA, TypeCat);
END IF;
-- End our for loop
END LOOP forLoop;
COMMIT;
SELECT s;
END;
call web.newTransaction('{"Owner": "user","Title": "Fix Function Foo" }');
https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
まあ、一般的には、このXML/JSON(EXTRACTVALUE/JSON_EXTRACT)を解析するために、XMLやJSONなどとストアドプロシージャの使用に適切な方法でオブジェクトのリストをシリアライズすることができます – Alexey