2016-06-10 4 views
0

Вот PL/SQL-запрос, который я пытаюсь понять:Access Коллекция PL/SQL

TYPE REC_ASSMNTCOMP IS RECORD (RF_CUST_ID_REF NUMBER, RF_TIMESTAMP DATE, RF_BC_ID_REF NUMBER, RF_OP_COMPVALUE NUMBER); 
TYPE TBL_ASSMNTCOMP_T IS TABLE OF REC_ASSMNTCOMP INDEX BY PLS_INTEGER; 
TYPE TBL_ASSMNTCOMP IS TABLE OF TBL_ASSMNTCOMP_T INDEX BY PLS_INTEGER; 

TYPE REC_ADJCOMP IS RECORD (RF_CUST_ID_REF NUMBER, RF_TIMESTAMP DATE, RF_BC_ID_REF NUMBER, RF_ADJ_COMPVALUE NUMBER); 
TYPE TBL_ADJCOMP_T IS TABLE OF REC_ADJCOMP INDEX BY PLS_INTEGER; 

TYPE REC_OPENCOMP IS RECORD (RF_BILLCYC_ID_REF NUMBER, RF_CUST_ID_REF NUMBER, RF_COMPTYPE NUMBER, RF_BC_ID_REF NUMBER, RF_COMPVALUE NUMBER); 
TYPE TBL_OPENCOMP IS TABLE OF REC_OPENCOMP INDEX BY PLS_INTEGER; 

V_DOC_ID    NUMBER; 
V_PROCESSING_DATE  DATE; 

V_TBL_ASSMNTCOMP  TBL_ASSMNTCOMP; 
V_TBL_ASSMNTCOMP_T  TBL_ASSMNTCOMP_T; 

V_TBL_ADJCOMP_T   TBL_ADJCOMP_T; 

V_TBL_OPENCOMP   TBL_OPENCOMP; 


IF V_TBL_ADJCOMP_T(I).RF_TIMESTAMP < V_TBL_ASSMNTCOMP(V_TBL_ADJCOMP_T(I).RF_CUST_ID_REF)(V_TBL_ASSMNTCOMP(V_TBL_ADJCOMP_T(I).RF_CUST_ID_REF).FIRST).RF_TIMESTAMP 
    THEN 

Запутанной часть ниже:

V_TBL_ASSMNTCOMP(V_TBL_ADJCOMP_T(I).RF_CUST_ID_REF)(V_TBL_ASSMNTCOMP(V_TBL_ADJCOMP_T(I).RF_CUST_ID_REF).FIRST).RF_TIMESTAMP 

что линия выше делает?

+0

Я думаю, что это какая-то дьявольски сложная иерархическая структура. Каковы определения ТИПОВ этих переменных? –

+0

@TonyAndrews TYPE REC_ASSMNTCOMP - ЗАПИСЬ (RF_CUST_ID_REF NUMBER, RF_TIMESTAMP DATE, RF_BC_ID_REF NUMBER, RF_OP_COMPVALUE NUMBER); – Zubair

ответ

1

Это может быть переписано разбито, как это:

-- (Declare IDX NUMBER) 
-- Get the RF_CUST_ID_REF from the I'th V_TBL_ADJCOMP_T record 
IDX := V_TBL_ADJCOMP_T(I).RF_CUST_ID_REF; 

-- (Declare REC with same type as rows of V_TBL_ASSMNTCOMP) 
-- Get the V_TBL_ASSMNTCOMP record indexed by that RF_CUST_ID_REF 
REC := V_TBL_ASSMNTCOMP(IDX); 

IF V_TBL_ADJCOMP_T(I).RF_TIMESTAMP < REC(REC.FIRST).RF_TIMESTAMP THEN... 

Это еще ничего не значит для меня, но, возможно, это будет для вас? Похоже, что V_TBL_ASSMNTCOMP - это таблица, структура которой включает в себя другую таблицу - то есть, что REC, объявленный выше, является таблицей и строкой внутри V_TBL_ASSMNTCOMP?

См. this PDF для объяснения Стивена Фейерштейна из рода «многоуровневой» коллекции. Думаю, вы имеете дело с.

+0

Фраза «слишком умно пополам» приходит на ум за исходный код ... –

+2

Я напомнил «Остерегайтесь умных, умных убийств». @Zubair Удостоверьтесь, что вы учитесь на этом и используете комментарии и пишите для человека, который будет поддерживать код позади вас. Оригинальный автор считал, что он умный, но в конечном счете его код дороже, поскольку теперь вы тратите время на то, чтобы понять это, вместо того, чтобы вносить изменения. Когда вы это выясните, обязательно прокомментируйте это. –

+0

@TonyAndrews: Вы снова видите код, я добавил более подробную информацию. – Zubair