mysql中,delimiter格式问题,不带参数的存储过程和带输入参数的存储过程以及带输入、输出参数的存储过程的区别;查看存储过程和从information_schema.Routines表中查看存储过程的信息区别,注意的地方
时间: 2023-06-29 19:09:58 浏览: 186
在MySQL中,Delimiter用于指定SQL语句中的分隔符。在使用存储过程时,需要使用Delimiter来指定存储过程内部语句的分隔符,以免与存储过程定义中的分隔符冲突。
不带参数的存储过程:
不带参数的存储过程不需要输入参数,只需执行存储过程即可。例如:
```
DELIMITER //
CREATE PROCEDURE my_procedure()
BEGIN
SELECT * FROM my_table;
END//
DELIMITER ;
```
带输入参数的存储过程:
带输入参数的存储过程需要在创建存储过程时定义输入参数,并在存储过程中使用输入参数进行操作。例如:
```
DELIMITER //
CREATE PROCEDURE my_procedure(IN param1 INT, IN param2 VARCHAR(50))
BEGIN
SELECT * FROM my_table WHERE column1 = param1 AND column2 = param2;
END//
DELIMITER ;
```
带输入、输出参数的存储过程:
带输入、输出参数的存储过程需要在创建存储过程时定义输入参数和输出参数,并在存储过程中使用输入参数进行操作,并将结果赋值给输出参数。例如:
```
DELIMITER //
CREATE PROCEDURE my_procedure(IN param1 INT, OUT param2 VARCHAR(50))
BEGIN
SELECT column2 INTO param2 FROM my_table WHERE column1 = param1;
END//
DELIMITER ;
```
查看存储过程:
可以使用SHOW PROCEDURE STATUS命令来查看存储过程的信息。例如:
```
SHOW PROCEDURE STATUS WHERE Db = 'my_database';
```
也可以使用SHOW CREATE PROCEDURE命令来查看存储过程的定义。例如:
```
SHOW CREATE PROCEDURE my_procedure;
```
从information_schema.Routines表中查看存储过程的信息:
可以使用information_schema.Routines表来查看存储过程的信息。例如:
```
SELECT * FROM information_schema.Routines WHERE Routine_type = 'PROCEDURE' AND Routine_schema = 'my_database';
```
需要注意的是,information_schema.Routines表中的参数信息是以JSON格式存储的。因此,在查询参数信息时需要对参数信息进行解析。例如:
```
SELECT
ROUTINE_NAME,
JSON_UNQUOTE(JSON_EXTRACT(PARAMETER_LIST, '$[0].name')) AS param1_name,
JSON_EXTRACT(PARAMETER_LIST, '$[0].type') AS param1_type,
JSON_EXTRACT(PARAMETER_LIST, '$[0].mode') AS param1_mode
FROM information_schema.Routines WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_SCHEMA = 'my_database';
```
阅读全文