2017-05-05 66 views

回答

4

目前,沒有辦法在MySQL存儲過程和函數中傳遞(或返回)對象。

但是,MySQL 5.7具有JSON函數,您可以傳遞varchar參數並使用JSON_EXTRACT函數提取值。

見的MySQL 5.7手冊:Functions That Search JSON Values

+0

它如此謝謝 – smith

+0

@史密斯歡迎您,請考慮標記我的答案爲已接受或upvote :) –

0

我能夠做到這一點在MySQL 5.7

如果你想變一下其中的關鍵,因爲我會做這個

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

之所以是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

相關問題