MySQL Tutorial/Procedure Function/Procedure Data Dictionary — различия между версиями

Материал из SQL эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 13:44, 26 мая 2010

Show the procedure"s database, name, language, security type, parameter list, body, definer, comment, and other information

mysql>
mysql>
mysql> DELIMITER //
mysql> CREATE PROCEDURE myProc (IN in_count INT)
    -> BEGIN
    ->     DECLARE count INT default 0;
    ->
    ->     increment: LOOP
    ->     SET count = count + 1;
    ->     IF count < 20 THEN ITERATE increment; END IF;
    ->     IF count > in_count THEN LEAVE increment;
    ->     END IF;
    ->     END LOOP increment;
    ->
    ->     SELECT count;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>
mysql> call myProc(5);
+-------+
| count |
+-------+
|    20 |
+-------+
1 row in set (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>
mysql>
mysql> SELECT * FROM mysql.proc WHERE name = "myProc"\G
*************************** 1. row ***************************
              db: test
            name: myProc
            type: PROCEDURE
   specific_name: myProc
        language: SQL
 sql_data_access: CONTAINS_SQL
is_deterministic: NO
   security_type: DEFINER
      param_list: IN in_count INT
         returns:
            body: BEGIN
    DECLARE count INT default 0;
    increment: LOOP
    SET count = count + 1;
    IF count < 20 THEN ITERATE increment; END IF;
    IF count > in_count THEN LEAVE increment;
    END IF;
    END LOOP increment;
    SELECT count;
END
         definer: root@localhost
         created: 2007-07-23 18:58:35
        modified: 2007-07-23 18:58:35
        sql_mode:
         comment:
1 row in set (0.00 sec)
mysql>
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>


To get more details on a stored procedure, use the SHOW CREATE PROCEDURE statement:

SHOW CREATE PROCEDURE [<database>.]<procedure name>;


Use SELECT statement to access on the proc table in the mysql database

mysql>
mysql>
mysql> DELIMITER //
mysql> CREATE PROCEDURE myProc (IN in_count INT)
    -> BEGIN
    ->     DECLARE count INT default 0;
    ->
    ->     increment: LOOP
    ->     SET count = count + 1;
    ->     IF count < 20 THEN ITERATE increment; END IF;
    ->     IF count > in_count THEN LEAVE increment;
    ->     END IF;
    ->     END LOOP increment;
    ->
    ->     SELECT count;
    -> END
    -> //
Query OK, 0 rows affected (0.02 sec)
mysql> DELIMITER ;
mysql>
mysql> call myProc(5);
+-------+
| count |
+-------+
|    20 |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql>
mysql> SELECT * FROM mysql.proc WHERE name = "myProc"\G
*************************** 1. row ***************************
              db: test
            name: myProc
            type: PROCEDURE
   specific_name: myProc
        language: SQL
 sql_data_access: CONTAINS_SQL
is_deterministic: NO
   security_type: DEFINER
      param_list: IN in_count INT
         returns:
            body: BEGIN
    DECLARE count INT default 0;
    increment: LOOP
    SET count = count + 1;
    IF count < 20 THEN ITERATE increment; END IF;
    IF count > in_count THEN LEAVE increment;
    END IF;
    END LOOP increment;
    SELECT count;
END
         definer: root@localhost
         created: 2007-07-23 18:58:34
        modified: 2007-07-23 18:58:34
        sql_mode:
         comment:
1 row in set (0.00 sec)
mysql>
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql>


Viewing Stored Procedures

To get a summary of the procedures across all databases in your system, use SHOW PROCEDURE STATUS.

Using the \G option outputs in rows instead of columns.



mysql>
mysql>
mysql> DELIMITER //
mysql> CREATE PROCEDURE myProc (IN in_count INT)
    -> BEGIN
    ->     DECLARE count INT default 0;
    ->
    ->     increment: LOOP
    ->     SET count = count + 1;
    ->     IF count < 20 THEN ITERATE increment; END IF;
    ->     IF count > in_count THEN LEAVE increment;
    ->     END IF;
    ->     END LOOP increment;
    ->
    ->     SELECT count;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>
mysql> call myProc(5);
+-------+
| count |
+-------+
|    20 |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql>
mysql> SHOW PROCEDURE STATUS\G
*************************** 1. row ***************************
           Db: test
         Name: myProc
         Type: PROCEDURE
      Definer: root@localhost
     Modified: 2007-07-23 18:58:34
      Created: 2007-07-23 18:58:34
Security_type: DEFINER
      Comment:
*************************** 2. row ***************************
           Db: test
         Name: simpleproc
         Type: PROCEDURE
      Definer: root@localhost
     Modified: 2007-07-17 18:50:06
      Created: 2007-07-17 18:50:06
Security_type: DEFINER
      Comment:
2 rows in set (0.02 sec)
mysql>
mysql>
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>


Viewing Stored Procedures with a LIKE clause

mysql>
mysql>
mysql> DELIMITER //
mysql> CREATE PROCEDURE myProc (IN in_count INT)
    -> BEGIN
    ->     DECLARE count INT default 0;
    ->
    ->     increment: LOOP
    ->     SET count = count + 1;
    ->     IF count < 20 THEN ITERATE increment; END IF;
    ->     IF count > in_count THEN LEAVE increment;
    ->     END IF;
    ->     END LOOP increment;
    ->
    ->     SELECT count;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql>
mysql> call myProc(5);
+-------+
| count |
+-------+
|    20 |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>
mysql>
mysql> SHOW PROCEDURE STATUS LIKE "my%"\G
*************************** 1. row ***************************
           Db: test
         Name: myProc
         Type: PROCEDURE
      Definer: root@localhost
     Modified: 2007-07-23 18:58:34
      Created: 2007-07-23 18:58:34
Security_type: DEFINER
      Comment:
1 row in set (0.02 sec)
mysql>
mysql>
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql>