-
Notifications
You must be signed in to change notification settings - Fork 111
ROUTINES
xiaoboluo768 edited this page Jun 7, 2020
·
2 revisions
- 该表提供查询关于存储过程和存储函数的信息(不包括用户自定义函数UDF)
- 该表中的信息与“mysql.proc”中记录的信息相对应(如果该表中有值的话)
- 该表为InnoDB引擎临时表
- 表定义语句
CREATE TEMPORARY TABLE `ROUTINES` (
`SPECIFIC_NAME` varchar(64) NOT NULL DEFAULT '',
`ROUTINE_CATALOG` varchar(512) NOT NULL DEFAULT '',
`ROUTINE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`ROUTINE_NAME` varchar(64) NOT NULL DEFAULT '',
`ROUTINE_TYPE` varchar(9) NOT NULL DEFAULT '',
`DATA_TYPE` varchar(64) NOT NULL DEFAULT '',
`CHARACTER_MAXIMUM_LENGTH` int(21) DEFAULT NULL,
`CHARACTER_OCTET_LENGTH` int(21) DEFAULT NULL,
`NUMERIC_PRECISION` bigint(21) unsigned DEFAULT NULL,
`NUMERIC_SCALE` int(21) DEFAULT NULL,
`DATETIME_PRECISION` bigint(21) unsigned DEFAULT NULL,
`CHARACTER_SET_NAME` varchar(64) DEFAULT NULL,
`COLLATION_NAME` varchar(64) DEFAULT NULL,
`DTD_IDENTIFIER` longtext,
`ROUTINE_BODY` varchar(8) NOT NULL DEFAULT '',
`ROUTINE_DEFINITION` longtext,
`EXTERNAL_NAME` varchar(64) DEFAULT NULL,
`EXTERNAL_LANGUAGE` varchar(64) DEFAULT NULL,
`PARAMETER_STYLE` varchar(8) NOT NULL DEFAULT '',
`IS_DETERMINISTIC` varchar(3) NOT NULL DEFAULT '',
`SQL_DATA_ACCESS` varchar(64) NOT NULL DEFAULT '',
`SQL_PATH` varchar(64) DEFAULT NULL,
`SECURITY_TYPE` varchar(7) NOT NULL DEFAULT '',
`CREATED` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`LAST_ALTERED` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`SQL_MODE` varchar(8192) NOT NULL DEFAULT '',
`ROUTINE_COMMENT` longtext NOT NULL,
`DEFINER` varchar(93) NOT NULL DEFAULT '',
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL DEFAULT '',
`COLLATION_CONNECTION` varchar(32) NOT NULL DEFAULT '',
`DATABASE_COLLATION` varchar(32) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 表字段含义(部分字段)
- SPECIFIC_NAME:存储程序名称
- ROUTINE_CATALOG:该字段总是为def
- ROUTINE_SCHEMA:存储程序所在的数据库名称
- ROUTINE_NAME:存储程序名称
- ROUTINE_TYPE:存储程序类型,有效值为:PROCEDURE和FUNCTION
- DTD_IDENTIFIER:如果存储程序为函数,则该字段为返回数据类型的值,如果为存储过程,则该字段为空
- ROUTINE_BODY:存储程序的主体内容,总是为"SQL"
- ROUTINE_DEFINITION:存储程序的具体的定义SQL文本
- EXTERNAL_LANGUAGE:表示是否使用外部语言。如果mysql.proc.language ='SQL',则EXTERNAL_LANGUAGE字段值为NULL,否则,EXTERNAL_LANGUAGE字段值和mysql.proc.language中的值相同。但是,当前MySQL Server还不支持除了SQL意外的其他预研,所以EXTERNAL_LANGUAGE字段值始终为NULL
- EXTERNAL_NAME:该字段总是为NULL
- EXTERNAL_LANGUAGE:存储程序的外部语言,由于目前MySQL 只支持SQL,所以该字段总是为NULL
- PARAMETER_STYLE:该字段总是为SQL
- IS_DETERMINISTIC:有效值为YES和NO,具体值依赖于定义存储程序时是否使用了DETERMINISTIC关键字来指定相关的特性
- SQL_DATA_ACCESS:表示存储程序数据访问特性,有效值为:CONTAINS SQL、NO SQL、READS SQL DATA、MODIFIES SQL DATA
- SQL_PATH:该字段总是为NULL
- SECURITY_TYPE:表示存储程序的安全特性,有效值为:DEFINER、INVOKER
- CREATED:表示创建存储程序的日期和时间。是一个TIMESTAMP值
- LAST_ALTERED:表示存储过程最近一次修改的日期和时间。也是一个TIMESTAMP值。如果自存储程序创建以来从未修改过,则该列值与CREATED列值相同
- SQL_MODE:表示创建或修改存储程序时MySQL Server的sql_mode值(该字段为 "MySQL extension" 列)
- ROUTINE_COMMENT:存储程序的注释信息(该字段为 "MySQL extension" 列)
- DEFINER:存储程序的创建者账户名(该字段为 "MySQL extension" 列)
- CHARACTER_SET_CLIENT:表示创建存储程序时的character_set_client系统变量会话值(该字段为 "MySQL extension" 列)
- COLLATION_CONNECTION:表示创建纯粹程序时的collation_connection系统变量会话值(该字段为 "MySQL extension" 列)
- DATABASE_COLLATION:表示创建存储程序时所在的数据库的排序规则(该字段为 "MySQL extension" 列)
- DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,CHARACTER_OCTET_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,DATETIME_PRECISION,CHARACTER_SET_NAME和COLLATION_NAME:这些字段含义和columns表的字段含义相同。这些字段提供有关存储函数(注意不是存储过程)的RETURNS子句的数据类型相关的信息。如果存储程序是存储过程,则这些列的值为NULL
* 有关存储的函数RETURNS数据类型的信息也可在PARAMETERS表中查询到一些信息。当存储程序为存储函数时,PARAMETERS.ORDINAL_POSITION列值为0
- 表记录内容示例
admin@localhost : information_schema 06:10:43> select * from ROUTINES limit 1\G;
*************************** 1. row ***************************
SPECIFIC_NAME: create_synonym_db
ROUTINE_CATALOG: def
ROUTINE_SCHEMA: sys
ROUTINE_NAME: create_synonym_db
ROUTINE_TYPE: PROCEDURE
DATA_TYPE:
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERIC_PRECISION: NULL
NUMERIC_SCALE: NULL
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
DTD_IDENTIFIER: NULL
ROUTINE_BODY: SQL
ROUTINE_DEFINITION: BEGIN DECLARE v_done bool DEFAULT FALSE; DECLARE v_db_name_check VARCHAR(64); DECLARE v_db_err_msg TEXT; DECLARE v_table VARCHAR(64); DECLARE v_views_created INT DEFAULT 0; DECLARE db_doesnt_exist CONDITION FOR SQLSTATE '42000'; DECLARE db_name_exists CONDITION FOR SQLSTATE 'HY000'; DECLARE c_table_names CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = in_db_name; DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; SELECT SCHEMA_NAME INTO v_db_name_check FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = in_db_name; IF v_db_name_check IS NULL THEN SET v_db_err_msg = CONCAT('Unknown database ', in_db_name); SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = v_db_err_msg; END IF; SELECT SCHEMA_NAME INTO v_db_name_check FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = in_synonym; IF v_db_name_check = in_synonym THEN SET v_db_err_msg = CONCAT('Can't create database ', in_synonym, '; database exists'); SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = v_db_err_msg; END IF; SET @create_db_stmt := CONCAT('CREATE DATABASE ', sys.quote_identifier(in_synonym)); PREPARE create_db_stmt FROM @create_db_stmt; EXECUTE create_db_stmt; DEALLOCATE PREPARE create_db_stmt; SET v_done = FALSE; OPEN c_table_names; c_table_names: LOOP FETCH c_table_names INTO v_table; IF v_done THEN LEAVE c_table_names; END IF; SET @create_view_stmt = CONCAT( 'CREATE SQL SECURITY INVOKER VIEW ', sys.quote_identifier(in_synonym), '.', sys.quote_identifier(v_table), ' AS SELECT * FROM ', sys.quote_identifier(in_db_name), '.', sys.quote_identifier(v_table) ); PREPARE create_view_stmt FROM @create_view_stmt; EXECUTE create_view_stmt; DEALLOCATE PREPARE create_view_stmt; SET v_views_created = v_views_created + 1; END LOOP; CLOSE c_table_names; SELECT CONCAT( 'Created ', v_views_created, ' view', IF(v_views_created != 1, 's', ''), ' in the ', sys.quote_identifier(in_synonym), ' database' ) AS summary; END
EXTERNAL_NAME: NULL
EXTERNAL_LANGUAGE: NULL
PARAMETER_STYLE: SQL
IS_DETERMINISTIC: NO
SQL_DATA_ACCESS: MODIFIES SQL DATA
SQL_PATH: NULL
SECURITY_TYPE: INVOKER
CREATED: 2017-07-06 12:43:53
LAST_ALTERED: 2017-07-06 12:43:53
SQL_MODE:
ROUTINE_COMMENT:
Description
Takes a source database name and synonym name, and then creates the
synonym database with views that point to all of the tables within
the source database.
......
DEFINER: mysql.sys@localhost
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.00 sec)
上一篇:REFERENTIAL_CONSTRAINTS表 |下一篇:SCHEMATA表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!