CftClub.ru
Клуб специалистов ЦФТ-Банк

Как бы так обмануть-2

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Ответить с цитатой
Полезность: Нет оценки
возможность есть... желания нет Smile
уточню вопрос: все вышесказанное, но не через динамический SQL, а средствами PL/Plus. т.е. именно способ указать компилятору текущий класс.
(ну вот, например, можно написать в групповой операции конструкцию:
Код:
x := this.[NEW#AUTO](...);
, и компилятор подставит вместо this имя пакета.)
_________________
two bee or not two bee
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Июн 18, 2008 09:41    Ответить с цитатой
Полезность: Нет оценки
alexiy пишет:
возможность есть... желания нет Smile
уточню вопрос: все вышесказанное, но не через динамический 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 в групповой лучше не использовать...

кстати, почему? Smile
_________________
two bee or not two bee
German
Профи


Вступление в Клуб: 25.06.2007
СообщениеСр Июн 18, 2008 11:45    Ответить с цитатой
Полезность: Нет оценки
alexiy пишет:
не очень понятно. а что будет внутри COUNT? как она будет считать число записей переданного класса?...


Динамический SQL (возможность есть... желания нет)

alexiy пишет:
this в групповой лучше не использовать...
кстати, почему? Smile


В простой это ID записи, в списочной - массив, а в групповой смысл размыт
_________________
Homo homini
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеСр Июн 18, 2008 11:52    Ответить с цитатой
Полезность: Нет оценки
German пишет:
alexiy пишет:
не очень понятно. а что будет внутри COUNT? как она будет считать число записей переданного класса?...


Динамический SQL (возможность есть... желания нет)

ну тк мы вернулись к началу Smile только через большее количество действий...
German пишет:
alexiy пишет:
this в групповой лучше не использовать...
кстати, почему? Smile


В простой это ID записи, в списочной - массив, а в групповой смысл размыт

ну, в PL/Plus много где смысл... размыт Smile догадываешься интуитивно. мне, как обычному пользователю продукта, по крайней мере, далеко не всегда понятна логика ядерщиков в плане синтаксиса (особенно многообразие вариантов написания одного и того же)
_________________
two bee or not two bee


Последний раз редактировалось: alexiy (Ср Июн 18, 2008 12:49), всего редактировалось 1 раз
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеСр Июн 18, 2008 11:58    Ответить с цитатой
Полезность: Нет оценки
German пишет:
alexiy пишет:
this в групповой лучше не использовать...
кстати, почему? Smile


В простой это ID записи, в списочной - массив, а в групповой смысл размыт


В групповой - это указатель на статический экземпляр (id) текущего типа, если таковой имеется. Иначе NULL.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеСр Июн 18, 2008 14:19    Ответить с цитатой
Полезность: Нет оценки
как вариант можно попробовать написать макрос.. как это любят делать разработчики ЦФТ..
_________________
всегда есть как минимум 2 выхода
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеСр Июн 18, 2008 16:01    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
как вариант можно попробовать написать макрос.. как это любят делать разработчики ЦФТ..

можно пример?...
работоспособный Smile
_________________
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    Ответить с цитатой
Полезность: Нет оценки
прошу прощения, но пример не совсем в тему...
поскоку:
Alexsey пишет:
Код:
         from methods

т.е. тут явно указана таблица, из которой идет выборка.
тем более, это PL/SQL, а не PL/Plus.

вот прямо по моему исходному вопросу - можно пример макроса?
с классом [ANY_TYPE] и именно PL/Plus Smile
...
на всякий случай: суть вовсе не в подсчете количества записей в какой-то таблице, это просто пример запроса... мог бы быть и другой запрос.
суть именно в косвенном указании/автоматическом вычислении имени таблицы компилятором.
_________________
two bee or not two bee
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru