Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Ср Июн 11, 2008 12:39  Как бы так обмануть-2 |
|
Полезность: Нет оценки
|
в операции класса ::[ANY_TYPE] есть запрос вида:
Код: | select x(count(1)) in ::[ANY_TYPE] into cnt; |
возможно ли его переписать так, чтобы вместо ::[ANY_TYPE] было некое косвенное указание на класс, которому принадлежит операция? (что-то вроде "&METHOD$CLASS", т.е. без явного указания имени класса в тексте PL/PLUS, чтобы компилятор сам подставил...) _________________ two bee or not two bee |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Ср Июн 18, 2008 08:51   |
|
Полезность: Нет оценки
|
А есть возможность собрать запрос, например, в текстовую строку, а затем его выполнить? То есть преобразовать текстовую переменную в исполнимый код (в PHP например это eval ) _________________ Homo homini |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Ср Июн 18, 2008 09:09   |
|
Полезность: Нет оценки
|
возможность есть... желания нет
уточню вопрос: все вышесказанное, но не через динамический SQL, а средствами PL/Plus. т.е. именно способ указать компилятору текущий класс.
(ну вот, например, можно написать в групповой операции конструкцию: Код: | x := this.[NEW#AUTO](...); | , и компилятор подставит вместо this имя пакета.) _________________ two bee or not two bee |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Ср Июн 18, 2008 09:41   |
|
Полезность: Нет оценки
|
alexiy пишет: | возможность есть... желания нет
уточню вопрос: все вышесказанное, но не через динамический SQL, а средствами PL/Plus. т.е. именно способ указать компилятору текущий класс.
(ну вот, например, можно написать в групповой операции конструкцию: Код: | x := this.[NEW#AUTO](...); | , и компилятор подставит вместо this имя пакета.) |
1. В любом типе сделать операцию COUNT, которая считает записи в классе, имя которого передается ей в виде параметра
2. Вызывать откуда угодно ::[].[COUNT](this%class)
P.S. this в групповой лучше не использовать... _________________ Homo homini |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Ср Июн 18, 2008 10:14   |
|
Полезность: Нет оценки
|
German пишет: |
1. В любом типе сделать операцию COUNT, которая считает записи в классе, имя которого передается ей в виде параметра
2. Вызывать откуда угодно ::[].[COUNT](this%class)
|
не очень понятно. а что будет внутри COUNT? как она будет считать число записей переданного класса?...
German пишет: | P.S. this в групповой лучше не использовать... |
кстати, почему?  _________________ two bee or not two bee |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Ср Июн 18, 2008 11:45   |
|
Полезность: Нет оценки
|
alexiy пишет: | не очень понятно. а что будет внутри COUNT? как она будет считать число записей переданного класса?... |
Динамический SQL (возможность есть... желания нет)
alexiy пишет: | this в групповой лучше не использовать...
кстати, почему?  |
В простой это ID записи, в списочной - массив, а в групповой смысл размыт _________________ Homo homini |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Ср Июн 18, 2008 11:52   |
|
Полезность: Нет оценки
|
German пишет: | alexiy пишет: | не очень понятно. а что будет внутри COUNT? как она будет считать число записей переданного класса?... |
Динамический SQL (возможность есть... желания нет)
|
ну тк мы вернулись к началу только через большее количество действий...
German пишет: | alexiy пишет: | this в групповой лучше не использовать...
кстати, почему?  |
В простой это ID записи, в списочной - массив, а в групповой смысл размыт |
ну, в PL/Plus много где смысл... размыт догадываешься интуитивно. мне, как обычному пользователю продукта, по крайней мере, далеко не всегда понятна логика ядерщиков в плане синтаксиса (особенно многообразие вариантов написания одного и того же) _________________ two bee or not two bee
Последний раз редактировалось: alexiy (Ср Июн 18, 2008 12:49), всего редактировалось 1 раз |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Ср Июн 18, 2008 11:58   |
|
Полезность: Нет оценки
|
German пишет: | alexiy пишет: | this в групповой лучше не использовать...
кстати, почему?  |
В простой это ID записи, в списочной - массив, а в групповой смысл размыт |
В групповой - это указатель на статический экземпляр (id) текущего типа, если таковой имеется. Иначе NULL. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Ср Июн 18, 2008 14:19   |
|
Полезность: Нет оценки
|
как вариант можно попробовать написать макрос.. как это любят делать разработчики ЦФТ.. _________________ всегда есть как минимум 2 выхода |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Ср Июн 18, 2008 16:01   |
|
Полезность: Нет оценки
|
Alexsey пишет: | как вариант можно попробовать написать макрос.. как это любят делать разработчики ЦФТ.. |
можно пример?...
работоспособный  _________________ two bee or not two bee |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Июн 19, 2008 05:50   |
|
Полезность: Нет оценки
|
помоему этот работал:
Код: | pragma macro (method_exists,
'
declare
res integer;
begin
select count(1)
into res
from methods
where CLASS_ID = [1]
and SHORT_NAME = [2];
if res>=1 then
[0]:=''true'';
else
[0]:=''false'';
end if;
end;'
,process,substitute,execute); |
_________________ всегда есть как минимум 2 выхода |
|
 |
alexiy Профи
Вступление в Клуб: 29.06.2007
|
Чт Июн 19, 2008 08:26   |
|
Полезность: Нет оценки
|
прошу прощения, но пример не совсем в тему...
поскоку:
т.е. тут явно указана таблица, из которой идет выборка.
тем более, это PL/SQL, а не PL/Plus.
вот прямо по моему исходному вопросу - можно пример макроса?
с классом [ANY_TYPE] и именно PL/Plus
...
на всякий случай: суть вовсе не в подсчете количества записей в какой-то таблице, это просто пример запроса... мог бы быть и другой запрос.
суть именно в косвенном указании/автоматическом вычислении имени таблицы компилятором. _________________ two bee or not two bee |
|
 |
|