Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / доступ к глобальной переменной ХП / 18 сообщений из 18, страница 1 из 1
13.05.2015, 12:22
    #38957291
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
доступ к глобальной переменной ХП
Доброго дня!

Informix 12.10

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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


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

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

Тогда нет проблем:
1) с функ. тестированием;
2) с поиском мест где точно используется значение;
3) с поиском мест где точно изменяется значение;
4) с отслеживанием, что все места, где используется глобальная переменная, имеют одинаковое значение по умолчанию.
:).
...
Рейтинг: 0 / 0
14.05.2015, 20:39
    #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
14.05.2015, 20:46
    #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
14.05.2015, 21:45
    #38959244
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
доступ к глобальной переменной ХП
victor16, клёво! :)
victor16и есть еще вариант парсить sysprocedures
ключевое слово - парсить, поскольку вариант с grep тоже нужно усложнять через регулярные выражения - существует небольшая вероятность, что оператор DEFINE могли разнести по нескольким строкам, или на строку с DEFINE поместили какое-то "непотребство".
...
Рейтинг: 0 / 0
15.05.2015, 07:59
    #38959374
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
доступ к глобальной переменной ХП
АнатоЛойвариант с grep тоже нужно усложнять через регулярные выражения - существует небольшая вероятность, что оператор DEFINE могли разнести по нескольким строкам, или на строку с DEFINE поместили какое-то "непотребство".
Согласен
...
Рейтинг: 0 / 0
15.05.2015, 12:30
    #38959696
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
доступ к глобальной переменной ХП
victor16,

Спасибо за подсказки. Скрипт впечатлил ;-) .
...
Рейтинг: 0 / 0
20.05.2015, 02:53
    #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
20.05.2015, 08:25
    #38963516
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
доступ к глобальной переменной ХП
Выбегалло, это по теме или для общего развития?
Всё-таки отладка и тестирование совсем не одно и то же. Или предлагаете посмотреть, что умеет дебаггер - и забацать нужные фичи самому?
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / доступ к глобальной переменной ХП / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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