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

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

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

Example of an INSERT using a procedure variable

mysql>
mysql>
mysql>
mysql> CREATE TABLE Employee(
    ->     id            int,
    ->     first_name    VARCHAR(15),
    ->     last_name     VARCHAR(15),
    ->     start_date    DATE,
    ->     end_date      DATE,
    ->     salary        FLOAT(8,2),
    ->     city          VARCHAR(10),
    ->     description   VARCHAR(15)
    -> );
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->              values (1,"Jason",    "Martin",  "19960725",  "20060725", 1234.56, "Toronto",  "Programmer");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(2,"Alison",   "Mathews",  "19760321", "19860221", 6661.78, "Vancouver","Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(3,"James",    "Smith",    "19781212", "19900315", 6544.78, "Vancouver","Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(4,"Celia",    "Rice",     "19821024", "19990421", 2344.78, "Vancouver","Manager");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(5,"Robert",   "Black",    "19840115", "19980808", 2334.78, "Vancouver","Tester");
Query OK, 1 row affected (0.02 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(6,"Linda",    "Green",    "19870730", "19960104", 4322.78,"New York",  "Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(7,"David",    "Larry",    "19901231", "19980212", 7897.78,"New York",  "Manager");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(8,"James",    "Cat",     "19960917",  "20020415", 1232.78,"Vancouver", "Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from Employee;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
8 rows in set (0.00 sec)
mysql>
mysql>
mysql>
mysql>
mysql> delimiter $$
mysql> CREATE PROCEDURE myProc()
    -> BEGIN
    ->      DECLARE i INT DEFAULT 1;
    ->
    ->      SET autocommit=0;
    ->
    ->      WHILE (i<=10) DO
    ->           INSERT INTO employee (id, first_name)VALUES(id,CONCAT("record ",i));
    ->           SET i=i+1;
    ->      END WHILE;
    ->
    ->
    -> END$$
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> delimiter ;
mysql>
mysql> call myProc();
Query OK, 1 row affected (0.00 sec)
mysql> select * from Employee;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      |
| NULL | record 1   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 2   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 3   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 4   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 5   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 6   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 7   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 8   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 9   | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
| NULL | record 10  | NULL      | NULL       | NULL       |    NULL | NULL      | NULL        |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
18 rows in set (0.00 sec)
mysql> drop procedure myProc;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql>
mysql>
mysql> drop table Employee;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>


Insert data in a while loop

mysql>
mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE myFunction()
    -> BEGIN
    ->         DECLARE i INT DEFAULT 1;
    ->
    ->         CREATE TEMPORARY TABLE ascii_chart
    ->             (ascii_code int, ascii_char CHAR(1));
    ->
    ->         WHILE (i<=128) DO
    ->                INSERT INTO ascii_chart VALUES(i,CHAR(i));
    ->                SET i=i+1;
    ->         END WHILE;
    ->
    ->         select * from ascii_chart;
    ->
    ->         drop table ascii_chart;
    ->
    -> END$$
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ;
mysql>
mysql> call myFunction();
+------------+------------+
| ascii_code | ascii_char |
+------------+------------+
|         38 | &          |
|         39 | "          |
|         40 | (          |
|         41 | )          |
|         42 | *          |
|         43 | +          |
|         44 | ,          |
|         45 | -          |
|         46 | .          |
|         47 | /          |
|         48 | 0          |
|         49 | 1          |
|         50 | 2          |
|         51 | 3          |
|         52 | 4          |
|         53 | 5          |
|         54 | 6          |
|         55 | 7          |
|         56 | 8          |
|         57 | 9          |
|         58 | :          |
|         59 | ;          |
|         60 | <          |
|         61 | =          |
|         62 | >          |
|         63 | ?          |
|         64 | @          |
|         65 | A          |
|         66 | B          |
|         67 | C          |
|         68 | D          |
|         69 | E          |
|         70 | F          |
|         71 | G          |
|         72 | H          |
|         73 | I          |
|         74 | J          |
|         75 | K          |
|         76 | L          |
|         77 | M          |
|         78 | N          |
|         79 | O          |
|         80 | P          |
|         81 | Q          |
|         82 | R          |
|         83 | S          |
|         84 | T          |
|         85 | U          |
|         86 | V          |
|         87 | W          |
|         88 | X          |
|         89 | Y          |
|         90 | Z          |
|         91 | [          |
|         92 | \          |
|         93 | ]          |
|         94 | ^          |
|         95 | _          |
|         96 | `          |
|         97 | a          |
|         98 | b          |
|         99 | c          |
|        100 | d          |
|        101 | e          |
|        102 | f          |
|        103 | g          |
|        104 | h          |
|        105 | i          |
|        106 | j          |
|        107 | k          |
|        108 | l          |
|        109 | m          |
|        110 | n          |
|        111 | o          |
|        112 | p          |
|        113 | q          |
|        114 | r          |
|        115 | s          |
|        116 | t          |
|        117 | u          |
|        118 | v          |
|        119 | w          |
|        120 | x          |
|        121 | y          |
|        122 | z          |
|        123 | {          |
|        124 | |          |
|        125 | }          |
|        126 | ~          |
|        127 | ?          |
|        128 | �          |
+------------+------------+
128 rows in set (0.02 sec)
Query OK, 0 rows affected (0.67 sec)
mysql>
mysql> drop procedure myFunction;
Query OK, 0 rows affected (0.00 sec)


Insert data into a table in a procedure

mysql>
mysql>
mysql> CREATE TABLE Employee(
    ->     id            int,
    ->     first_name    VARCHAR(15),
    ->     last_name     VARCHAR(15),
    ->     start_date    DATE,
    ->     end_date      DATE,
    ->     salary        FLOAT(8,2),
    ->     city          VARCHAR(10),
    ->     description   VARCHAR(15)
    -> );
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->              values (1,"Jason",    "Martin",  "19960725",  "20060725", 1234.56, "Toronto",  "Programmer");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(2,"Alison",   "Mathews",  "19760321", "19860221", 6661.78, "Vancouver","Tester");
Query OK, 1 row affected (0.02 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(3,"James",    "Smith",    "19781212", "19900315", 6544.78, "Vancouver","Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(4,"Celia",    "Rice",     "19821024", "19990421", 2344.78, "Vancouver","Manager");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(5,"Robert",   "Black",    "19840115", "19980808", 2334.78, "Vancouver","Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(6,"Linda",    "Green",    "19870730", "19960104", 4322.78,"New York",  "Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(7,"David",    "Larry",    "19901231", "19980212", 7897.78,"New York",  "Manager");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> insert into Employee(id,first_name, last_name, start_date, end_Date,   salary,  City,       Description)
    ->               values(8,"James",    "Cat",     "19960917",  "20020415", 1232.78,"Vancouver", "Tester");
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from Employee;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
8 rows in set (0.00 sec)
mysql>
mysql>
mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE sp_add_location
    ->          (in_location     VARCHAR(30),
    ->           in_first_name   VARCHAR(30),
    ->           in_last_name    VARCHAR(30),
    ->           description     VARCHAR(10))
    ->     MODIFIES SQL DATA
    -> BEGIN
    ->    INSERT INTO employee
    ->      (city,first_name,last_name,description)
    ->     VALUES
    ->      (in_location,in_first_name,in_last_name,description);
    -> END$$
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ;
mysql> call sp_add_location("New City","First","Last","Descr");
Query OK, 1 row affected (0.02 sec)
mysql> drop procedure sp_add_location;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select * from Employee;
+------+------------+-----------+------------+------------+---------+-----------+-------------+
| id   | first_name | last_name | start_date | end_date   | salary  | city      | description |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
|    1 | Jason      | Martin    | 1996-07-25 | 2006-07-25 | 1234.56 | Toronto   | Programmer  |
|    2 | Alison     | Mathews   | 1976-03-21 | 1986-02-21 | 6661.78 | Vancouver | Tester      |
|    3 | James      | Smith     | 1978-12-12 | 1990-03-15 | 6544.78 | Vancouver | Tester      |
|    4 | Celia      | Rice      | 1982-10-24 | 1999-04-21 | 2344.78 | Vancouver | Manager     |
|    5 | Robert     | Black     | 1984-01-15 | 1998-08-08 | 2334.78 | Vancouver | Tester      |
|    6 | Linda      | Green     | 1987-07-30 | 1996-01-04 | 4322.78 | New York  | Tester      |
|    7 | David      | Larry     | 1990-12-31 | 1998-02-12 | 7897.78 | New York  | Manager     |
|    8 | James      | Cat       | 1996-09-17 | 2002-04-15 | 1232.78 | Vancouver | Tester      |
| NULL | First      | Last      | NULL       | NULL       |    NULL | New City  | Descr       |
+------+------------+-----------+------------+------------+---------+-----------+-------------+
9 rows in set (0.00 sec)
mysql>
mysql>
mysql> drop table Employee;
Query OK, 0 rows affected (0.00 sec)
mysql>