Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สร้าง MySQL Stored Procedure รับชื่อฐานข้อมูลเป็นพารามิเตอร์ แสดงรายการตารางพร้อมรายละเอียด


สมมติว่าปัจจุบันเรากำลังใช้ฐานข้อมูลชื่อ query และมีตารางดังนี้:

mysql> Show tables in query; 
+-----------------+ 
| Tables_in_query | 
+-----------------+ 
| student_detail  | 
| student_info    | 
+-----------------+ 
2 rows in set (0.00 sec)

ต่อไปนี้คือ Stored Procedure ซึ่งจะรับชื่อฐานข้อมูลเป็นพารามิเตอร์และให้รายการตารางพร้อมรายละเอียด:

mysql> DELIMITER// 
mysql> CREATE procedure tb_list(db_name varchar(40)) 
    -> BEGIN 
    -> SET @z := CONCAT('Select * from information_schema.tables WHERE table_schema = ','\'',db_name,'\''); 
    -> Prepare stmt from @z; 
    -> EXECUTE stmt; 
    -> END // 
Query OK, 0 rows affected (0.06 sec)

ตอนนี้ เรียก Stored Procedure นี้โดยให้ชื่อฐานข้อมูลเป็นพารามิเตอร์:

mysql> DELIMITER; 
mysql> CALL tb_list('query')\G 
*************************** 1. row *************************** 
    TABLE_CATALOG: def 
    TABLE_SCHEMA: query 
    TABLE_NAME: student_detail 
    TABLE_TYPE: BASE TABLE 
    ENGINE: InnoDB 
    VERSION: 10 
    ROW_FORMAT: Dynamic 
    TABLE_ROWS: 4 
    AVG_ROW_LENGTH: 4096 
    DATA_LENGTH: 16384 
    MAX_DATA_LENGTH: 0 
    INDEX_LENGTH: 0 
    DATA_FREE: 0 
    AUTO_INCREMENT: NULL 
    CREATE_TIME: 2017-12-13 16:25:44 
    UPDATE_TIME: NULL 
    CHECK_TIME: NULL 
    TABLE_COLLATION: latin1_swedish_ci 
    CHECKSUM: NULL 
    CREATE_OPTIONS: 
    TABLE_COMMENT: 
*************************** 2. row *************************** 
    TABLE_CATALOG: def 
    TABLE_SCHEMA: query 
    TABLE_NAME: student_info 
    TABLE_TYPE: BASE TABLE 
    ENGINE: InnoDB 
    VERSION: 10 
    ROW_FORMAT: Dynamic 
    TABLE_ROWS: 4 
    AVG_ROW_LENGTH: 4096 
    DATA_LENGTH: 16384 
    MAX_DATA_LENGTH: 0 
    INDEX_LENGTH: 0 
    DATA_FREE: 0 
    AUTO_INCREMENT: NULL 
    CREATE_TIME: 2017-12-12 09:52:51 
    UPDATE_TIME: NULL 
    CHECK_TIME: NULL 
    TABLE_COLLATION: latin1_swedish_ci 
    CHECKSUM: NULL 
    CREATE_OPTIONS: 
    TABLE_COMMENT: 
2 rows in set (0.00 sec)