Как я мог бы преобразовать оператор for в DB2 в MYSQL

#mysql #db2

#mysql #db2

Вопрос:

Мне нужно преобразовать оператор for в DB2 в MYSQL, но пока я понятия не имею. Может ли кто-нибудь дать мне несколько советов или сказать, как написать это в MYSQL? Приведенный ниже код представляет собой образец инструкции for, который я нашел на веб-сайте IBM.

 BEGIN
  DECLARE fullname CHAR(40);
  FOR v1 AS
      c1 CURSOR FOR
   SELECT firstname, midinit, lastname FROM employee
    DO
      SET fullname =
          lastname CONCAT ', '
                   CONCAT firstname
                   CONCAT ' '
                   CONCAT midinit;
      INSERT INTO TNAMES VALUES ( fullname );
  END FOR; 
END; 
  

Комментарии:

1. Это кажется слишком сложным способом генерации полного имени в любой версии sql, наверняка подойдет insert … select?

2. Но в MYSQL, похоже, нет оператора FOR. Если я просто скопирую пример кода в MYSQL workbench, это выдаст мне ошибку.

Ответ №1:

Возможно, это

 MariaDB [sandbox]> select title,firstname,middlename,lastname from awperson limit 10;
 ------- ----------- ------------ ------------ 
| title | firstname | middlename | lastname   |
 ------- ----------- ------------ ------------ 
|       | Ken       | J          | Sánchez    |
|       | Terri     | Lee        | Duffy      |
|       | Roberto   |            | Tamburello |
|       | Rob       |            | Walters    |
| Ms.   | Gail      | A          | Erickson   |
| Mr.   | Jossef    | H          | Goldberg   |
|       | Dylan     | A          | Miller     |
|       | Diane     | L          | Margheim   |
|       | Gigi      | N          | Matthew    |
|       | Michael   |            | Raheem     |
 ------- ----------- ------------ ------------ 
10 rows in set (0.00 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> drop table if exists t;
Query OK, 0 rows affected (0.19 sec)

MariaDB [sandbox]> create table t (fullname varchar(100));
Query OK, 0 rows affected (0.42 sec)

MariaDB [sandbox]> insert into t(fullname)
    -> select trim(concat(ifnull(title,''),' ',ifnull(firstname,''),' ',ifnull(middlename,''),' ',ifnull(lastname,'')))
    -> from awperson
    -> limit 10;
Query OK, 10 rows affected (0.17 sec)
Records: 10  Duplicates: 0  Warnings: 0

MariaDB [sandbox]>
MariaDB [sandbox]> select * from t;
 ----------------------- 
| fullname              |
 ----------------------- 
| Ken J Sánchez         |
| Terri Lee Duffy       |
| Roberto  Tamburello   |
| Rob  Walters          |
| Ms. Gail A Erickson   |
| Mr. Jossef H Goldberg |
| Dylan A Miller        |
| Diane L Margheim      |
| Gigi N Matthew        |
| Michael  Raheem       |
 ----------------------- 
10 rows in set (0.00 sec)
  

Комментарии:

1. возможно ли, что я все еще мог бы использовать cursor для этого?

2. Курсоры следует использовать только тогда, когда операции set не будут выполняться, по какой причине вы хотите использовать cursor?

3. Да, мне нужно использовать SET после цикла for. Мне Интересно, как написать оператор for для cursor в MYSQL.

4. Вы должны прочитать это dev.mysql.com/doc/refman/8.0/en/cursors.html напишите какой-нибудь код способом mysql и, если у вас возникнут трудности, отправьте свой код для помощи.