如何将对象(dto)作为参数中的单个列表传递给存储过程



我想像参数一样传递dto,并在spring jdbc中调用存储过程。是否可以这样做?

我想用dto来调用副标准者中的存储过程,而不是设置参数?因为我有大量参数。

目前,MySQL存储过程和函数中无法通过(或返回(对象。

但是,MySQL 5.7具有JSON函数,您可以通过varchar函数传递CC_1参数并提取值。

请参阅MySQL 5.7手册:搜索JSON值的函数

我能够在mySQL 5.7

中执行此操作

如果您想变性哪种键,我会做的

SET TypeCat = CONCAT(CONVERT('$.', CHAR(50)), T)

MySQL认为'$.'是双重的原因

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

最新更新