簡體   English   中英

是否可以在 MySQL 中制作一個接收 JSON 參數的 function?

[英]Is it possible to make a function that receives a JSON parameter in MySQL?

我想知道是否可以制作一個接收 MySQL 參數的 JSON 參數的 function。 在 PostgreSQL 中完成了類似的操作(附加示例)。

我需要將 PostgreSQL DB 遷移到 MySQL 並且有很多這樣的功能。

CREATE OR REPLACE FUNCTION fn_crud_sls_quotation_concept_types (data json)

RETURNS boolean
LANGUAGE 'plpgsql' 
AS 
$$

DECLARE
"vType"         integer := data ->> 'type';
"vId"           bigint  := data ->> 'id';
"vDescription"  varchar := data ->> 'description';
"vStatus"       integer := data ->> 'status';
"vUserId"       integer := data ->> 'userId';

BEGIN

IF "vType" = 1 THEN -- Data Insert  

        INSERT INTO tbl_sls_quotation_concept_types(description, status, "createdBy")
        VALUES("vDescription", "vStatus", "vUserId");
        
    RETURN TRUE;
    
ELSIF "vType" = 2 THEN -- Data Update

        UPDATE tbl_sls_quotation_concept_types 
        SET "description"   = "vDescription",
            "status"        = "vStatus",
            "updatedBy"     = "vUserId", 
            "updatedAt"     = current_timestamp
        WHERE id = "vId";
    
    RETURN TRUE;
    
ELSIF "vType" = 3  THEN -- Data Delete
        
        UPDATE tbl_sls_quotation_concept_types 
        SET status = 0 ,
            "updatedBy" = "vUserId", 
            "updatedAt" = current_timestamp
        WHERE id = "vId" ;
        
    RETURN TRUE;

END IF;

END;
$$;

是的,存儲的 function 可以接受 JSON 數據類型的輸入參數:

mysql> delimiter $$
mysql> create function myfunc(data json) returns varchar(10) deterministic 
  begin 
    declare val varchar(10); 
    set val = json_extract(data, '$.val'); 
    return val; 
  end$$
mysql> delimiter ;
mysql> select myfunc('{"foo": 1, "val": "bar"}');
+------------------------------------+
| myfunc('{"foo": 1, "val": "bar"}') |
+------------------------------------+
| "bar"                              |
+------------------------------------+

https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html說:

類型:

任何有效的 MySQL 數據類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM