Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

EXECUTE STATEMENT   Найти похожие ветки 

 
PEAKTOP ©   (2006-07-20 11:48) [0]

Задача:
 Есть таблицы
 ACC - бухгалтерский план счетов
   ID INTEGER NOT NULL - Код счета
   NAME VARCHAR(255)  - Название
   PARENT_ID INTEGER   - Код родительского счета
   REL_NAME  VARCHAR(50) - Название таблицы-справочника в базе данных, из котрой выбирается субконто проводки.
Например, для счетов 361,362, 631,632 субконто справочник Контрагенты, для счетов 661, 6611 субконто справочник Сотрудникии т.д. Все таблицы-справочники имеют поля ID и NAME.
   <JRNL_CASH> - журнал кассовых документов
     ......
     ACC_ID INTEGER NOT NULL REFERENCES ACC(ID)  - Код счета из плана счетов
     SUBKONTO_ID INTEGER - Код элемента субконто в справочнике
     ..........    
  Есть процедура JR_CASH
CREATE PROCEDURE JR_CASH(
.....
)RETURNS(    
 .....
 ACC_ID INTEGER,
 SUBKONTO_ID INTEGER,
 SUBKONTO_NAME VARCHAR(255)
 ....
)
AS
 DECLARE VARIABLE P_REL_NAME VARCHAR(50);
 DECLARE VARIABLE P_SQL_STMT VARCHAR(255);
BEGIN
 FOR
   SELECT  JR.ACC_ID, JR.SUBKONTO_ID, A.RELNAME
   FROM     JRNL_CASH JR, ACC A
   WHERE   (A.ID = JR.ACC_ID)
   INTO     :ACC_ID, :SUBKONTO_ID, :P_REL_NAME
 DO
   BEGIN
   P_SQL_STMT = "SELECT FIRST 1 TB.NAME FROM "||:P_REL_NAME||" TB WHERE (TB.ID = "||:SUBKONTO_ID||") ";
   FOR
     EXECUTE STATEMENT :P_SQL_STMT INTO :SUBKONTO_NAME
   DO
     SUSPEND;
   END
END

Проблема:
 Процедура JR_CASH вызывает дикие тормоза даже на 20-30 документах за один день. При этом ее процедура-клон, в которой блок EXECUTE STATEMENT заменен на много-вложенную структуру IF(:ACC_ID IN (361,362, 631,632))THEN select from contragent ELSE IF (:ACC_ID IN (661, 6611)) THEN select from sotrudnik ELSE ...(вроде CASE в паскале) , занимающую три экрана, просто "улетает" на документах за полгода.

Вопрос
 Получается, что EXECUTE STATEMENTформирует план запроса каждый раз перед выполнением, а также вообще не использует индексы ? Или отчего такие тормоза ?


 
Desdechado ©   (2006-07-20 12:33) [1]

План - каждый раз. Индексы - как любой запрос, по необходимости.
Процедура же уже препарирована и план на нее формируется 1 раз.


 
PEAKTOP ©   (2006-07-20 13:17) [2]

Спасибо .
Кстати, туда же
если используется конструкция EXECUTE STATEMENT, нужны ли права доступа вызывающей процедуре на вызываемую таблицу (просмотр, процедуру), или достаточно иметь права пользователю ?


 
Romkin ©   (2006-07-20 13:52) [3]

Права пользователя перекрывают. Вот если у пользователя такого права нет - смотрятся права процедуры



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.038 c
2-1157371407
Ефимыч
2006-09-04 16:03
2006.09.24
Подскажите, как сделать, чтоб jpeg не компилировался в exe-шник?


4-1148412487
Mr tray
2006-05-23 23:28
2006.09.24
из приложения добавить языковую раскладку


1-1155199143
Kolan
2006-08-10 12:39
2006.09.24
Использование паттерна Comand.


3-1153308172
DmiSb
2006-07-19 15:22
2006.09.24
Не получается через ADO открыть *.dbf


1-1155644817
DelphiLexx
2006-08-15 16:26
2006.09.24
Копировать и вставить несколько контролов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский