Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 помогите чтобы быстрее было, пожалуйста!  [new]
ор2
Guest
ну вот сказала, чтобы Orcle использовал индексы а быстрее не стало.
помогите pls как сделать чтобы запрос быстрее пробегал данные в больших таблицах, спасибо большое.
таблицы CORR_WORK_CDRS и COMM_BATCH большие и partitioned
вот сам запрос
CREATE TABLE TEMP_SUMMCORR_TABLE_NAME as
SELECT
ROOT_PARTITION_DATE AS PARTITION_DATE
, ROOT_CALL_ID as CORRELATION_ID
, TO_CHAR(MAX(ANSWER_DT),'YYYYMMDDHH24MISS') as CALL_TIME
, MAX(IS_LAST_IN_CHAIN) as COMPLETED_CHAIN
, COUNT(LEG_NMBR) as CDR_COUNT
, MIN(CALLING_NUMBER) as CALLING_NUMBER
, MIN(DIALED_NUMBER) as DIALED_NUMBER
, TO_CHAR(MAX(CONVERSATION_DURATION),'999999999') as CONVERSATION_DURATION
, ' ' as CORRELATION_STATUS
, CASE
WHEN SUBSTR(MIN(DIALED_NUMBER),1,2) in ('58', '59')
THEN SUBSTR(MIN(DIALED_NUMBER),1,6)
END as LNP_PREFIX
, MIN(SEIZURE_DT) as SEIZURE_DT
, MIN(BILLING_NUMBER) as BILLING_NUMBER
, MIN(BILLING_REJECT) as BILLING_REJECT
, 'S' as DOUBLE_IND
FROM (
SELECT w.PARTITION_DATE
, w.CALL_ID
, w.ANSWER_DT as ANSWER_DT
, LEVEL as LEG_NMBR
, w.IS_FIRST_IN_CHAIN
, w.IS_LAST_IN_CHAIN
, CONNECT_BY_ROOT w.PARTITION_DATE as ROOT_PARTITION_DATE
, CONNECT_BY_ROOT w.CALL_ID as ROOT_CALL_ID
, CONNECT_BY_ROOT v.CALLING_NBR as CALLING_NUMBER
, CONNECT_BY_ROOT v.DIALED_NBR as DIALED_NUMBER
, v.CONVERSATION_DURATION as CONVERSATION_DURATION
, CONNECT_BY_ROOT v.SEIZURE_DT as SEIZURE_DT
, CONNECT_BY_ROOT v.BILLING_NBR as BILLING_NUMBER
, CONNECT_BY_ROOT v.BILLING_REJECT as BILLING_REJECT
FROM CORR_WORK_CDRS w, COMM_BATCH v
WHERE w.PARTITION_DATE=v.PARTITION_DATE AND w.CALL_ID=v.CALL_ID
START WITH w.IS_FIRST_IN_CHAIN='T'
CONNECT BY
PRIOR w.PARTITION_DATE=w.FROM_PARTITION_DATE
AND PRIOR w.CALL_ID=w.FROM_CALL_ID
)
GROUP BY ROOT_PARTITION_DATE, ROOT_CALL_ID
HAVING MAX(IS_LAST_IN_CHAIN) = 'T'
3 апр 07, 03:10    [3970452]     Ответить | Цитировать Сообщить модератору
 Re: помогите чтобы быстрее было, пожалуйста!  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
ор2
ну вот сказала, чтобы Orcle использовал индексы а быстрее не стало.помогите pls как сделать чтобы запрос быстрее пробегал данные в больших таблицах, спасибо большое.
таблицы CORR_WORK_CDRS и COMM_BATCH большие и partitioned
вот сам запрос
CREATE TABLE TEMP_SUMMCORR_TABLE_NAME as
	SELECT 
		ROOT_PARTITION_DATE AS PARTITION_DATE
		, ROOT_CALL_ID as CORRELATION_ID
		, TO_CHAR(MAX(ANSWER_DT),'YYYYMMDDHH24MISS') as CALL_TIME
		, MAX(IS_LAST_IN_CHAIN) as COMPLETED_CHAIN
		, COUNT(LEG_NMBR) as CDR_COUNT
		, MIN(CALLING_NUMBER) as CALLING_NUMBER
		, MIN(DIALED_NUMBER) as DIALED_NUMBER
		, TO_CHAR(MAX(CONVERSATION_DURATION),'999999999') as CONVERSATION_DURATION
		, ' ' as CORRELATION_STATUS
		, CASE 
			WHEN SUBSTR(MIN(DIALED_NUMBER),1,2) in ('58', '59')
			THEN SUBSTR(MIN(DIALED_NUMBER),1,6) 
		END as LNP_PREFIX
		, MIN(SEIZURE_DT) as SEIZURE_DT
		, MIN(BILLING_NUMBER) as BILLING_NUMBER
		, MIN(BILLING_REJECT) as BILLING_REJECT
		, 'S' as DOUBLE_IND
	FROM (
		SELECT w.PARTITION_DATE
			, w.CALL_ID
			, w.ANSWER_DT as ANSWER_DT
			, LEVEL as LEG_NMBR
			, w.IS_FIRST_IN_CHAIN
			, w.IS_LAST_IN_CHAIN
			, CONNECT_BY_ROOT w.PARTITION_DATE as ROOT_PARTITION_DATE
			, CONNECT_BY_ROOT w.CALL_ID as ROOT_CALL_ID
			, CONNECT_BY_ROOT v.CALLING_NBR as CALLING_NUMBER
			, CONNECT_BY_ROOT v.DIALED_NBR as DIALED_NUMBER
			, v.CONVERSATION_DURATION as CONVERSATION_DURATION
			, CONNECT_BY_ROOT v.SEIZURE_DT as SEIZURE_DT
			, CONNECT_BY_ROOT v.BILLING_NBR as BILLING_NUMBER
			, CONNECT_BY_ROOT v.BILLING_REJECT as BILLING_REJECT
		FROM CORR_WORK_CDRS w, COMM_BATCH v
		WHERE w.PARTITION_DATE=v.PARTITION_DATE AND w.CALL_ID=v.CALL_ID
			START WITH w.IS_FIRST_IN_CHAIN='T'
			CONNECT BY 
				PRIOR w.PARTITION_DATE=w.FROM_PARTITION_DATE 
				AND PRIOR w.CALL_ID=w.FROM_CALL_ID
	)
	GROUP BY ROOT_PARTITION_DATE, ROOT_CALL_ID
	HAVING MAX(IS_LAST_IN_CHAIN) = 'T'
Индекс не всегда способствует повышению производительности запроса. Иногда случается даже с точностью до наоборот - использование индекса резко снижает производительность запроса. Если есть интерес просветиться на эту тему, то скачай книгу Тома Кайта "Oracle для профессионалов", там всё хорошо разъяснено.

Чтобы посоветовать тебе что-то по теме нужно как минимум следующее:
0) Знать структуру таблицы и её индексов (DDL по созданию таблиц)
1) Видеть план выполнения запроса
2) Хоть что-то знать о распределении данных и соотношения размеров исходных таблиц и размеров итоговой выборки.
3 апр 07, 05:16    [3970490]     Ответить | Цитировать Сообщить модератору
 Re: помогите чтобы быстрее было, пожалуйста!  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Я смотрю, вам уже рекомендовали почитать про основные ошибки СВО. Но на всякий случай повторю ссылку, если вдруг в первый раз вы её не заметили: тынц - основные причины ошибок СВО.

З.Ы.
Статистика по таблице у вас собирается? Если собирается, то как?
3 апр 07, 05:29    [3970494]     Ответить | Цитировать Сообщить модератору
 Re: помогите чтобы быстрее было, пожалуйста!  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54384
ор2
ну вот сказала, чтобы Orcle использовал индексы а быстрее не стало
И правильно:
Не проси у Бога дождя - проси у Бога урожая!
3 апр 07, 12:24    [3972416]     Ответить | Цитировать Сообщить модератору
 Re: помогите чтобы быстрее было, пожалуйста!  [new]
ор2
Guest
DDL таблиц
CREATE TABLE CORR_WORK_CDRS
(
PARTITION_DATE DATE,
CALL_ID VARCHAR2(13),
FROM_PARTITION_DATE DATE,
FROM_CALL_ID VARCHAR2(13),
IS_FIRST_IN_CHAIN CHAR(1),
IS_LAST_IN_CHAIN CHAR(1),
ANSWER_DT DATE,
DISCONNECT_DT DATE,
SEIZURE_DT DATE,
CALLED_NBR VARCHAR2(40),
H323_CONF_ID VARCHAR2(35),
INCOMING_PORT VARCHAR2(10),
INCOMING_TRUNK_GROUP VARCHAR2(10),
OUTGOING_PORT VARCHAR2(10),
OUTGOING_TRUNK_GROUP VARCHAR2(10),
SWITCH_IDENT VARCHAR2(16),
INC_RMT_SWITCH_ID VARCHAR2(16),
INC_RMT_TRUNK_GROUP VARCHAR2(10),
INC_RMT_TRUNK_PORT VARCHAR2(10),
OUT_RMT_SWITCH_ID VARCHAR2(16),
OUT_RMT_TRUNK_GROUP VARCHAR2(10),
OUT_RMT_TRUNK_PORT VARCHAR2(10),
CALL_TYPE_ID VARCHAR2(22),
LAST_UPDATE DATE
)
TABLESPACE <%=snpRef.getOption("DATA_TBLSPACE")%>
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> PCTINCREASE 0)


CREATE UNIQUE INDEX IDX1_CorrWorkCDR_Key
ON CORR_WORK_CDRS(PARTITION_DATE, CALL_ID)
NOLOGGING
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED) PCTFREE 0 TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>


CREATE INDEX IDX2_CorrWorkCDR_FROM_KEY
ON CORR_WORK_CDRS(FROM_PARTITION_DATE, FROM_CALL_ID)
NOLOGGING
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED) PCTFREE 0 TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>
и
CREATE TABLE COMM_BATCH (
Partition_Date DATE,
Call_Id VARCHAR2(13),
Billing_Reject VARCHAR2(4),
Account_Nbr VARCHAR2(15),
Account_Nbr_Ind NUMBER(1),
Answer_Dt VARCHAR2(14),
Answer_Dt_Ind NUMBER(1),
Billing_Nbr VARCHAR2(40),
Billing_Nbr_Ind NUMBER(1),
Billing_Numbering_Plan VARCHAR2(1),
Billing_Numbering_Plan_Ind NUMBER(1),
Called_Nbr VARCHAR2(40),
Called_Nbr_Ind NUMBER(1),
Called_Numbering_Plan VARCHAR2(1),
Called_Numbering_Plan_Ind NUMBER(1),
Calling_Nbr VARCHAR2(25),
Calling_Nbr_Ind NUMBER(1),
Calling_Numbering_Plan VARCHAR2(1),
Calling_Numbering_Plan_Ind NUMBER(1),
Call_Type_Id VARCHAR2(13),
Completion_Code VARCHAR2(5),
Completion_Code_Ind NUMBER(1),
Conversation_Duration VARCHAR2(10),
Conversation_Duration_Ind NUMBER(1),
Cust_Lookup_Nbr VARCHAR2(25),
Cust_Lookup_Nbr_Ind NUMBER(1),
Dialed_Nbr VARCHAR2(40),
Dialed_Nbr_Ind NUMBER(1),
Disconnect_Dt VARCHAR2(14),
Disconnect_Dt_Ind NUMBER(1),
Error_Code VARCHAR2(10),
Feed_Source VARCHAR2(3),
From_Cic VARCHAR2(4),
From_Cic_Ind NUMBER(1),
From_Country_Code VARCHAR2(4),
From_Country_Code_Ind NUMBER(1),
From_County VARCHAR2(2),
From_County_Ind NUMBER(1),
From_EOCLLI VARCHAR2(11),
From_EOCLLI_Ind NUMBER(1),
From_Lata VARCHAR2(5),
From_Lata_Ind NUMBER(1),
From_Name VARCHAR2(10),
From_Name_Ind NUMBER(1),
From_Ocn VARCHAR2(4),
From_Ocn_Ind NUMBER(1),
From_Rate_Center VARCHAR2(10),
From_Rate_Center_Ind NUMBER(1),
From_State_Country VARCHAR2(2),
From_State_Country_Ind NUMBER(1),
From_Tandem VARCHAR2(11),
From_Tandem_Ind NUMBER(1),
Inc_Circuit_Type VARCHAR2(1),
Inc_Circuit_Type_Ind NUMBER(1),
Inc_Link_Carrier VARCHAR2(6),
Inc_Link_Carrier_Ind NUMBER(1),
Incoming_Port VARCHAR2(10),
Incoming_Port_Ind NUMBER(1),
Incoming_Trunk_Group VARCHAR2(10),
Incoming_Trunk_Group_Ind NUMBER(1),
Incoming_Trunk_Port VARCHAR2(10),
Incoming_Trunk_Port_Ind NUMBER(1),
Inc_Rmt_Switch_Id VARCHAR2(16),
Inc_Rmt_Switch_Id_Ind NUMBER(1),
Inc_Rmt_Trunk_Group VARCHAR2(10),
Inc_Rmt_Trunk_Group_Ind NUMBER(1),
Jurisdiction VARCHAR2(2),
Jurisdiction_Ind NUMBER(1),
Leg_Order VARCHAR2(3),
Long_Duration_Indic VARCHAR2(1),
Long_Duration_Indic_Ind NUMBER(1),
Out_Circuit_Type VARCHAR2(1),
Out_Circuit_Type_Ind NUMBER(1),
Outgoing_Port VARCHAR2(10),
Outgoing_Port_Ind NUMBER(1),
Outgoing_Trunk_Group VARCHAR2(10),
Outgoing_Trunk_Group_Ind NUMBER(1),
Out_Link_Carrier VARCHAR2(6),
Out_Link_Carrier_Ind NUMBER(1),
Out_Rmt_Switch_Id VARCHAR2(16),
Out_Rmt_Switch_Id_Ind NUMBER(1),
Out_Rmt_Trunk_Group VARCHAR2(10),
Out_Rmt_Trunk_Group_Ind NUMBER(1),
Out_Rmt_Trunk_Port VARCHAR2(10),
Out_Rmt_Trunk_port_Ind NUMBER(1),
Overseas_Indic VARCHAR2(1),
Overseas_Indic_Ind NUMBER(1),
Raw_Record_Len VARCHAR2(5),
Raw_Record_Offset VARCHAR2(10),
Release_Dt VARCHAR2(14),
ReleaseDt_Ind NUMBER(1),
Roaming_Nbr1 VARCHAR2(25),
Roaming_Nbr1_Ind NUMBER(1),
Roaming_Nbr2 VARCHAR2(25),
Roaming_Nbr2_Ind NUMBER(1),
Seizure_Dt VARCHAR2(14),
Seizure_Dt_Ind NUMBER(1),
Seizure_Duration VARCHAR2(10),
Seizure_Duration_Ind NUMBER(1),
Service_Type VARCHAR2(3),
Service_Type_Ind NUMBER(1),
Setup_Duration VARCHAR2(10),
Setup_Duration_Ind NUMBER(1),
Source_Ident VARCHAR2(50),
Switch_Ident VARCHAR2(16),
Switch_Ident_Ind NUMBER(1),
Time_Offset VARCHAR2(4),
To_Cic VARCHAR2(4),
To_Cic_Ind NUMBER(1),
To_CountryCode VARCHAR2(4),
To_CountryCode_Ind NUMBER(1),
To_County VARCHAR2(2),
To_County_Ind NUMBER(1),
To_EOCLLI VARCHAR2(11),
To_EOCLLI_Ind NUMBER(1),
To_Lata VARCHAR2(5),
To_Lata_Ind NUMBER(1),
To_Name VARCHAR2(10),
To_Name_Ind NUMBER(1),
To_Ocn VARCHAR2(4),
To_Ocn_Ind NUMBER(1),
To_Rate_Center VARCHAR2(10),
To_Rate_Center_Ind NUMBER(1),
To_State_Country VARCHAR2(2),
To_State_Country_Ind NUMBER(1),
To_Tandem VARCHAR2(11),
To_Tandem_Ind NUMBER(1),
Inc_Swtch_Catlvl1 VARCHAR2(40),
Inc_Swtch_Catlvl2 VARCHAR2(40),
Inc_Swtch_Catlvl3 VARCHAR2(40),
Out_Swtch_Catlvl1 VARCHAR2(40),
Out_Swtch_Catlvl2 VARCHAR2(40),
Out_Swtch_Catlvl3 VARCHAR2(40)
)
TABLESPACE <%=snpRef.getOption("DATA_TBLSPACE")%> PCTFREE 0
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> PCTINCREASE 0)
PARTITION BY RANGE (Partition_Date)
(PARTITION #vivodi.initialPartitionName VALUES LESS THAN (TO_DATE(#vivodi.initialPartitionDate,'YYYYMMDD'))
)



CREATE INDEX IDX1_COMM_BATCH ON COMM_BATCH(Source_Ident)
NOLOGGING
LOCAL PARALLEL (DEGREE 3)
REVERSE
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED) PCTFREE 0 TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>


CREATE INDEX IDX2_COMM_BATCH
ON COMM_BATCH(Call_Id)
NOLOGGING
LOCAL PARALLEL (DEGREE 3)
REVERSE
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED) PCTFREE 0 TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>

CREATE INDEX IDX3_CallingNbr
ON COMM_BATCH(Calling_Nbr)
NOLOGGING
LOCAL PARALLEL (DEGREE 3)
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED)
PCTFREE 0
TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>

CREATE INDEX IDX_Called_Nbr_COMM_BATCH
ON COMM_BATCH(Called_Nbr)
NOLOGGING
LOCAL PARALLEL (DEGREE 3)
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED)
PCTFREE 0
TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>


CREATE INDEX IDX_Billing_Nbr_COMM_BATCH
ON COMM_BATCH(Billing_Nbr)
NOLOGGING
LOCAL PARALLEL (DEGREE 3)
STORAGE (INITIAL <%=snpRef.getOption("TABLE_INIT")%> NEXT <%=snpRef.getOption("TABLE_NEXT")%> MINEXTENTS 2 MAXEXTENTS UNLIMITED)
PCTFREE 0
TABLESPACE <%=snpRef.getOption("INDEX_TBLSPACE")%>

план выполнения запроса


============
Plan Table
============
-------------------------------------------------------+-----------------------------------+---------------+
| Id | Operation | Name | Rows | Bytes | Cost | Time | Pstart| Pstop |
-------------------------------------------------------+-----------------------------------+---------------+
| 0 | CREATE TABLE STATEMENT | | | | 78K | | | |
| 1 | LOAD AS SELECT | | | | | | | |
| 2 | FILTER | | | | | | | |
| 3 | HASH GROUP BY | | 348K | 41M | 77K | 00:16:44 | | |
| 4 | VIEW | | 348K | 41M | 77K | 00:16:43 | | |
| 5 | CONNECT BY WITH FILTERING | | | | | | | |
| 6 | FILTER | | | | | | | |
| 7 | COUNT | | | | | | | |
| 8 | MERGE JOIN | | 348K | 39M | 75K | 00:15:28 | | |
| 9 | SORT JOIN | | 345K | 11M | 8924 | 00:02:48 | | |
| 10 | TABLE ACCESS FULL | CORR_WORK_CDRS| 345K | 11M | 1471 | 00:00:18 | | |
| 11 | SORT JOIN | | 969K | 79M | 67K | 00:14:41 | | |
| 12 | PARTITION RANGE ALL | | 969K | 79M | 12K | 00:02:27 | 1 | 15 |
| 13 | TABLE ACCESS FULL | COMM_BATCH| 969K | 79M | 12K | 00:02:27 | 1 | 15 |
| 14 | HASH JOIN | | | | | | | |
| 15 | CONNECT BY PUMP | | | | | | | |
| 16 | COUNT | | | | | | | |
| 17 | MERGE JOIN | | 348K | 39M | 75K | 00:15:28 | | |
| 18 | SORT JOIN | | 345K | 11M | 8924 | 00:02:48 | | |
| 19 | TABLE ACCESS FULL | CORR_WORK_CDRS| 345K | 11M | 1471 | 00:00:18 | | |
| 20 | SORT JOIN | | 969K | 79M | 67K | 00:14:41 | | |
| 21 | PARTITION RANGE ALL | | 969K | 79M | 12K | 00:02:27 | 1 | 15 |
| 22 | TABLE ACCESS FULL | COMM_BATCH| 969K | 79M | 12K | 00:02:27 | 1 | 15 |
| 23 | COUNT | | | | | | | |
| 24 | MERGE JOIN | | 348K | 39M | 75K | 00:15:28 | | |
| 25 | SORT JOIN | | 345K | 11M | 8924 | 00:02:48 | | |
| 26 | TABLE ACCESS FULL | CORR_WORK_CDRS| 345K | 11M | 1471 | 00:00:18 | | |
| 27 | SORT JOIN | | 969K | 79M | 67K | 00:14:41 | | |
| 28 | PARTITION RANGE ALL | | 969K | 79M | 12K | 00:02:27 | 1 | 15 |
| 29 | TABLE ACCESS FULL | COMM_BATCH| 969K | 79M | 12K | 00:02:27 | 1 | 15 |
-------------------------------------------------------+-----------------------------------+---------------+
Predicate Information:
----------------------
2 - filter(MAX("IS_LAST_IN_CHAIN")='T')
5 - access("W"."FROM_PARTITION_DATE"=PRIOR NULL AND "W"."FROM_CALL_ID"=PRIOR NULL)
6 - filter("W"."IS_FIRST_IN_CHAIN"='T')
11 - access("W"."PARTITION_DATE"="V"."PARTITION_DATE")
11 - filter(("W"."CALL_ID"="V"."CALL_ID" AND "W"."PARTITION_DATE"="V"."PARTITION_DATE"))
14 - access("W"."FROM_PARTITION_DATE"=PRIOR NULL AND "W"."FROM_CALL_ID"=PRIOR NULL)
20 - access("W"."PARTITION_DATE"="V"."PARTITION_DATE")
20 - filter(("W"."CALL_ID"="V"."CALL_ID" AND "W"."PARTITION_DATE"="V"."PARTITION_DATE"))
27 - access("W"."PARTITION_DATE"="V"."PARTITION_DATE")
27 - filter(("W"."CALL_ID"="V"."CALL_ID" AND "W"."PARTITION_DATE"="V"."PARTITION_DATE"))

обе таблицы большие миллионы записей в день
в таблицу COMM_BATCH данные вставляются из других 4-х таблиц, пбрабатываются и пишутся в CORR_WORK_CDRS на них и основан select


to Сергей, спасибо за тынц, разбираюсь
6 апр 07, 21:50    [3992690]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить