Пока цикл выбора имен полей?

У меня неприятный, неприятный макет данных, с которым я вынужден работать. Наконец-то я получил рабочий запрос с использованием C# и цикла for, выполняющего один и тот же запрос снова и снова, но настраивая, какие поля вызываются, но теперь мне интересно, возможно ли это сделать с помощью цикла while. Я получаю сообщение об ошибке, и я не уверен, что это потому, что я использую Faircom / C-tree в качестве базы данных или что-то не так с моим запросом. Я обычно являюсь пользователем Mysql.

таблица содержит 20 полей, которые мне нужны и которые нужно извлечь в список csv. Они codetype1-codetype20, и я хочу, чтобы это было что-то вроде value1, value2, value3... где, как сейчас, я возвращаю их всех по одному. Проблема в том, что codetype1 зависит от другого поля, чтобы определить, куда я обращаюсь, чтобы найти информацию об этом коде, именно поэтому операторы case.

DROP PROCEDURE IF EXISTS proc_loop_test;
CREATE PROCEDURE proc_loop_test()
    SET @index = 1;
    WHILE(@index  < 21) DO

        SELECT Replace(Concat(To_char(apptid), To_char(.@index) ), ' ', '') AS reference_id,
                   apptid                                                              AS a_reference_id,
                   CASE
                     WHEN c.ee > 0 THEN d.amt
                     ELSE insfee.amt
                   END                                                    AS amount,
                   CASE
                     WHEN c.ee > 0 THEN Rtrim(e.moneyname)
                     ELSE insname.namefeecatid
                   END                                                    AS moneyschedule_name,
                   CASE codetype@index
                              WHEN 1 THEN rtrim(a.descript)
                              ELSE rtrim(b.descript0)
                   END                                                                  AS description,
                   CASE codetype@index
                              WHEN 1 THEN rtrim(a.abbrevdescript)
                              ELSE rtrim(b.abbrev0)
                   END                                                                  AS abbreviated_description,
                   CASE codetype@index
                              WHEN 1 THEN rtrim(a.thiscode)
                              ELSE rtrim(b.thiscode0)
                   END AS code
        FROM       meetings
        LEFT JOIN
                   (
                        SELECT     admin.table2.procid,
                                    admin.table2.this_code_id,
                                    admin.v_table1.descript,
                                    admin.v_table1.abbrevdescript,
                                    admin.v_table1.thiscode
                        FROM       admin.table2
                        INNER JOIN admin.v_table1
                        ON         admin.table2.this_code_id = admin.v_table1.this_code_id) AS a
        ON         meetings.codeid@index = a.procid
        LEFT JOIN
                   (
                          SELECT admin.v_table1.descript       AS descript0,
                                 admin.v_table1.abbrevdescript AS abbrev0,
                                 admin.v_table1.thiscode        AS thiscode0,
                                 admin.v_table1.this_code_id
                          FROM   admin.v_table1) AS b
        ON         meetings.codeid@index = b.this_code_id
        LEFT JOIN
                   (
                          SELECT patid AS id,
                                 ee
                          FROM   admin.customer) AS c
        ON         meetings.patid = c.id
        LEFT JOIN
                   (
                          SELECT this_code_id AS redid,
                                 eecategoryid,
                                 amt
                          FROM   admin.eeule) AS d
        ON         c.ee = d.eecategoryid
        AND        d.redid = b.this_code_id
        LEFT JOIN
                   (
                          SELECT eecategoryid AS namefeecatid,
                                 moneyname
                          FROM   admin.eeulenames) AS e
        ON         d.eecategoryid = e.namefeecatid
        LEFT JOIN (SELECT pi.customer_id,
                            pi.primarykk_id AS picid,
                            pi.primarykk_name,
                            pi.first_name,
                            pi.last_name,
                            i.groupname,
                            i.ee
                    FROM   admin.v_pir AS pi
                            LEFT JOIN admin.money AS i
                                ON pi.primarykk_id = i.insid) AS
                    ins
                ON ins.customer_id = c.id
        LEFT JOIN (SELECT this_code_id AS redid,
                            eecategoryid,
                            amt
                    FROM   admin.eeule) AS insfee
                ON ins.ee = insfee.eecategoryid
                    AND insfee.redid = b.this_code_id
       LEFT JOIN (SELECT eecategoryid AS namefeecatid,
                         moneyname
                  FROM   admin.eeulenames) AS insname
              ON insfee.eecategoryid = insname.namefeecatid
        WHERE      codeid@index >= 1
    END WHILE;
END;

Я никогда не использовал цикл while, и, хотя я кое-что понимаю, я должен выбрать это, чтобы что-то сделать INTO, нужно ли мне создавать временную таблицу или все это можно просто сохранить в памяти до конца цикла и вернуть,

Для чего он стоит, весь запрос SELECT работает в C#, когда вы заменяете @index с объединяющим форматом " . index . "

1 ответ

Алан,

На основании предоставленной вами информации настоятельно рекомендуется обратиться к вашему поставщику за этим. Однако вы пытаетесь создать хранимую процедуру, используя собственный синтаксис mySQL. Поддержка хранимых процедур уникальна для каждого поставщика базы данных. C-treeACE SQL от FairCom фактически использует Java для межплатформенной поддержки и.NET для Windows.

https://docs.faircom.com/doc/jspt/

Разработка хранимых процедур требует глубокого знания структуры базы данных, которая сильно зависит от приложения. В этом случае могут быть задействованы многие устаревшие зависимости приложений. Опять же, вашим лучшим источником информации будет ваш поставщик приложений.

Спасибо,

FairCom Поддержка

Другие вопросы по тегам