powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / доступ к глобальной переменной ХП
18 сообщений из 18, страница 1 из 1
доступ к глобальной переменной ХП
    #38957291
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Доброго дня!

Informix 12.10

Есть ли какай нибудь способ получить значение глобальной переменной объявленной и проинициализированной в ХП на SPL так , что бы не писать для этого специальную ХП ?
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38957738
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr, получить где? На клиенте?
Тогда нет :) Это же переменные ХП :)
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38957840
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
АнатоЛой,

Получить запросом к серверу. Чем то типа dbinfo() или запросом к SMI.

Имеется в виду альтернатива написанию SP, которая вернет это значение глобальной переменной.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958012
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpr, я понял.
Опуская кучу размышлений на эту тему: в доке упоминаний не видел.
Можно попробовать выкрутиться через EXECUTE IMMEDIATE, но очень вероятно, что:
1) нарвёшься на ограничения;
или
2) производительность/влияние на работу сервака будет некудышнее.

Напоследок: зачем оно тебе надо? :)
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958038
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойНапоследок: зачем оно тебе надо? :)

Это кмк из разряда - лучше неделю потренироваться, а потом за 5 минут долететь. ))))
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958423
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
АнатоЛойcpr, я понял.
Опуская кучу размышлений на эту тему: в доке упоминаний не видел.
Можно попробовать выкрутиться через EXECUTE IMMEDIATE, но очень вероятно, что:
1) нарвёшься на ограничения;
или
2) производительность/влияние на работу сервака будет некудышнее.

Напоследок: зачем оно тебе надо? :)

Проштудировал ноледж-центр - тоже ничего похожего.
Придется динамически создавать процедуру, которая вернет значение глобальной переменной.

Надобность довольно экзотическая. Вкратце - задача связана с автоматизацией функционального тестирования. Во время прогона теста в определенных точках сценария тестирования для организации проверки контрольных значений надо получить значения глобальных переменных. Т.к. ХП очень много и глобальных переменных еще больше, то хотелось избежать создания специальных ХП для получения состояния глобальных переменных в SPL-процедурах и функциях. Но похоже другого пути не видно. Т.к. читать шаред-память напрямую нереально.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958457
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprВо время прогона теста в определенных точках сценария тестирования для организации проверки контрольных значений надо получить значения глобальных переменных.

Подозреваю, что в одном конкретном тесте в одном месте нужных значений глобальных переменных не больше 2-4. Нет?

[quot cpr]
Т.к. ХП очень много и глобальных переменных еще больше, то хотелось избежать создания специальных ХП для получения состояния глобальных переменных в SPL-процедурах и функциях.

cprНо похоже другого пути не видно.


Безвыходных ситуаций не бывает.
Динамический SQL с генерацией ХП всё-таки тут "так себе решение".
Максимум: генерить им ХП по шаблону "CREATE PROCEDURE GetGVV_%GLOBAL_VAR_NAME%(....) RETURNING ....";

Вариант без динамического SQL:

Напиши одну ХП:
- объявление всех глобальных переменных;
- возврат значений как тебе больше удобно.

вариант А) ROW со всеми значениями;
вариант Б)
- создание временной таблицы ("столбцы переменная-значение" или "сколько переменных - столько и столбцов" (с перехватом ошибки при попытке создания, если уже создавалась);
- сохранение значений переменных во временную таблицу.
вариант В) по входному параметру (строка с именем переменной) возврат значения именно этой переменной.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958460
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соори, сорвалось с кнопки.

По поводу:
cprХП очень много и глобальных переменных еще больше
НА... ЗАЧЕМ?
Наследство? Перепроектировать нельзя?

Может лучше временные таблицы сессии использовать?
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958821
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
АнатоЛойПодозреваю, что в одном конкретном тесте в одном месте нужных значений глобальных переменных не больше 2-4. Нет?


Так и есть даже меньше, поэтому сгенерить процедуру не проблема.
А хотелось сделать красиво.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958868
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
АнатоЛойНаследство? Перепроектировать нельзя?

Да собственно проблем никаких нет, все работает отлично.
А после перехода на 12-й в будущее смотрим с оптимизмом.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38958893
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprАнатоЛойПодозреваю, что в одном конкретном тесте в одном месте нужных значений глобальных переменных не больше 2-4. Нет?


Так и есть даже меньше, поэтому сгенерить процедуру не проблема.
А хотелось сделать красиво.

Красиво - это использовать "DEFINE GLOBAL <конкретная переменная>..." только в двух ХП:
GetGV_<конкретная переменная> и
SetGV_<конкретная переменная>.
А во ВСЕХ остальных местах вызывать эти ХП.

Тогда нет проблем:
1) с функ. тестированием;
2) с поиском мест где точно используется значение;
3) с поиском мест где точно изменяется значение;
4) с отслеживанием, что все места, где используется глобальная переменная, имеют одинаковое значение по умолчанию.
:).
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38959206
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cprА хотелось сделать красиво.
Можно сгенерить такую процедуру за 6 шагов:
Код: powershell
1.
2.
3.
4.
5.
6.
dbschema -d <dbname> createdb.sql
echo "create procedure get_global_var_value(varname char(128)) returning char(128);" > get_global_var_value.sql
cat createdb.sql | grep -i global | grep -i define >> get_global_var_value.sql
cat createdb.sql | grep -i global | grep -i define | awk {'print "if upshift(varname) == upshift(\"" $3 "\") then return " $3 "; end if;"'} >> get_global_var_value.sql
echo "return null;" >> get_global_var_value.sql
echo "end procedure;" >> get_global_var_value.sql
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38959211
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поторопился, не учел, что определение переменных может встретиться в нескольких функциях
Код: powershell
1.
2.
3.
4.
5.
6.
dbschema -d <dbname> createdb.sql
echo "create procedure get_global_var_value(varname char(128)) returning char(128);" > get_global_var_value.sql
cat createdb.sql | grep -i global | grep -i define | sort -u >> get_global_var_value.sql
cat createdb.sql | grep -i global | grep -i define | sort -u | awk {'print "if upshift(varname) == upshift(\"" $3 "\") then return " $3 "; end if;"'} >> get_global_var_value.sql
echo "return null;" >> get_global_var_value.sql
echo "end procedure;" >> get_global_var_value.sql



ну и есть еще вариант парсить sysprocedures
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38959244
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor16, клёво! :)
victor16и есть еще вариант парсить sysprocedures
ключевое слово - парсить, поскольку вариант с grep тоже нужно усложнять через регулярные выражения - существует небольшая вероятность, что оператор DEFINE могли разнести по нескольким строкам, или на строку с DEFINE поместили какое-то "непотребство".
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38959374
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АнатоЛойвариант с grep тоже нужно усложнять через регулярные выражения - существует небольшая вероятность, что оператор DEFINE могли разнести по нескольким строкам, или на строку с DEFINE поместили какое-то "непотребство".
Согласен
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38959696
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
victor16,

Спасибо за подсказки. Скрипт впечатлил ;-) .
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38963441
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cprАнатоЛойcpr, я понял.
Опуская кучу размышлений на эту тему: в доке упоминаний не видел.
Можно попробовать выкрутиться через EXECUTE IMMEDIATE, но очень вероятно, что:
1) нарвёшься на ограничения;
или
2) производительность/влияние на работу сервака будет некудышнее.

Напоследок: зачем оно тебе надо? :)

Проштудировал ноледж-центр - тоже ничего похожего.
Придется динамически создавать процедуру, которая вернет значение глобальной переменной.

Надобность довольно экзотическая. Вкратце - задача связана с автоматизацией функционального тестирования. Во время прогона теста в определенных точках сценария тестирования для организации проверки контрольных значений надо получить значения глобальных переменных. Т.к. ХП очень много и глобальных переменных еще больше, то хотелось избежать создания специальных ХП для получения состояния глобальных переменных в SPL-процедурах и функциях. Но похоже другого пути не видно. Т.к. читать шаред-память напрямую нереально.

http://www-01.ibm.com/support/knowledgecenter/SSGU8G_11.70.0/com.ibm.sqls.doc/ids_sqs_1903.htm

You can use IBM® Database Add-Ins for Visual Studio to debug an Informix® SPL procedure.

...
Debugging Informix SPL procedures in CLR applications
While you develop Windows or ASP.NET applications in C# and Visual Basic, you can debug the Common Language Runtime (CLR) applications with IBM Database Add-Ins for Visual Studio. If the applications access Informix database server instances, you can debug the SPL procedures that are called from the applications while you debug the applications.

The IBM Unified Debugger, which is the feature that you use to debug SPL procedures in C# and Visual Basic applications, is available for Informix, starting with version 11.70.
...
Рейтинг: 0 / 0
доступ к глобальной переменной ХП
    #38963516
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выбегалло, это по теме или для общего развития?
Всё-таки отладка и тестирование совсем не одно и то же. Или предлагаете посмотреть, что умеет дебаггер - и забацать нужные фичи самому?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / доступ к глобальной переменной ХП
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]