Пока цикл выбора имен полей?
У меня неприятный, неприятный макет данных, с которым я вынужден работать. Наконец-то я получил рабочий запрос с использованием 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 Поддержка