O pacote DBMS_XPLAN fornece uma maneira fácil para exibir o plano de execução em vários formatos pré-definidos, essa flexibilidade e o nível de detalhes estatísticos que o pacote oferece o torna uma ferramenta imprescindível num processo de tuning de uma instrução SQL. Você pode usar o pacote para exibir uma…
Uma ferramenta que facilita a leitura do plano de execução
Alguns aspectos na leitura do plano de execução não são tão simples e requerem um pouco de prática, um desses aspectos é determinar em que ordem as operações são executadas, já publicamos um artigo que orienta como identificar essa ordem, agora vamos realizar alguns testes com um script (autor: Adrian Billington) que mostra o plano de execução no mesmo formato da DBMS_XPLAN e acrescenta uma coluna indicativa da ordem de execução no relatório do plano de execução.
Como utilizar o script
O nome do script é XPLAN ele funciona com as versões de Oracle 10g ou superior, para utiliza-lo é necessário ter acesso as visões: GV$SESSION e GV$SQL_PLAN.
Esse script trabalha com 3 parâmetros posicionais:
- sql_id – opcional ( se não for informado o script vai considerar o ultimo sql_id executado)
- sql_child_number – opcional ( se não for informado o script vai utilizar “0”)
- plan_format – opcional ( se não for informado o script vai utilizar ‘TYPICAL IOSTATS LAST +PEEKED_BINDS’
O parâmetro plan_format pode receber os mesmos valores que utilizamos no pacote DBMS_XPLAN
Sintaxe para uso do script: @xplan.sql <sql_id> [cursor_child_number] [format]
Exemplos de utilização do script
Passando o parâmetro sql_id
Ajudo DBAs e analistas de sistema a se destacarem em suas empresas
e obter um crescimento mais acelerado em suas carreiras, quer saber mais click no link abaixo:
A seguir vamos executar uma consulta, obter seu SQL_ID e executar o script “xplan.sql” passando somente o primeiro parâmetro “sql_id”.
No plano de execução que será gerado vamos observar que serão incluídas duas colunas a mais em relação ao plano gerado pelo pacote DBMS_XPLAN, essas colunas são:
- “Pid” – Segunda coluna no plano de execução que indica o Parent ID da operação executada nesta linha.
- “Ord” – Terceira coluna no plano de execução que indica a sequência em que operações serão executadas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | SQL > ALTER SESSION SET statistics_level=ALL; Session altered. SQL > SQL > VARIABLE B1 number; SQL > VARIABLE B2 number; SQL > SQL > EXEC :B1 := 01; PL/SQL procedure successfully completed. Elapsed: 00:00:00.02 SQL > EXEC :B2 := 50; PL/SQL procedure successfully completed. SQL > SQL > SQL > SELECT nf.ID_NF, 2 nf.CLIENTE, 3 nf.DT_EMISSAO, 4 it.QUATIDADE, 5 pr.NOME 6 FROM notafiscal nf, 7 item it, 8 produto pr 9 WHERE nf.ID_NF = it.ID_NF 10 AND it.ID_PRODUTO = pr.ID_PRODUTO 11 AND nf.DT_EMISSAO between sysdate-500 and sysdate 12 AND pr.ID_PRODUTO between :B1 and :B2 13 ORDER BY 1,4; ID_NF CLIENTE DT_EMISSA QUATIDADE NOME ---------- -------------------------------------------------- --------- ---------- -------------------- 9 IXTLXLZGLRZZ9 06-DEC-14 13 UFWWBUYCFLHHPEWDCJZI 93 XCIIIVWRXRVYVDW93 09-DEC-14 8 FADDRUNENHLLSLTXQURR 1486 CDLXXXVINZAWPDPFEG1486 02-DEC-14 14 TTGFJBFYFYOBYXNETOCJ 1678 DCLXXVIIIWAFXIJNOXU1678 12-DEC-14 8 NNTPTQVWEPOBYVUAQQJQ 1921 CMXXITQSUDUVAWK1921 01-DEC-14 4 OWJNSZBBOUOZATMDNYUM 1921 CMXXITQSUDUVAWK1921 01-DEC-14 16 XLIOVPATSBHRHXUMMJSK 2101 CIGJURWGYRYR2101 10-DEC-14 16 OSMSAMQIEOEAXLPGXNWG 2696 DCXCVIDCZJZZKCHL2696 06-DEC-14 7 ONSJDLQYFOPTSKOWZNLA 2696 DCXCVIDCZJZZKCHL2696 06-DEC-14 14 YKCITKBFLEFLVAHUBHIM 2821 DCCCXXIGSRPEGAGBJ2821 24-NOV-14 13 QVBVQDPUNVGZQKRWVYEU 3003 IIIYNLTBADRUH3003 12-DEC-14 2 SYCKCSXNOUNGGTYEOKRG 3054 LIVROGRHTBULC3054 03-DEC-14 12 FEZJZBEABPLJYGSFKMSO 3120 CXXOVFVTVWTKT3120 29-NOV-14 11 MLCUEYBFZRAOOWTAZWYO 3239 CCXXXIXYWHXOMBPKB3239 11-DEC-14 15 FOFDIEQAOEQKCQBLYCEI 3379 CCCLXXIXPYWQPJGTGT3379 10-DEC-14 18 FEZJZBEABPLJYGSFKMSO 3903 CMIIIYPYCIAKBUZ3903 12-DEC-14 12 WIECXGRLBOMIIPBKFFIH 4428 CDXXVIIIKTEKOZFSNG4428 01-DEC-14 2 QVBVQDPUNVGZQKRWVYEU 4619 DCXIXJQLUGCZVQI4619 06-DEC-14 18 ICDPQWNDSFVJAVKFQPTJ 18 rows selected. SQL > SQL > SQL > SQL > SELECT sql_id, child_number 2 FROM v$sql 3 WHERE sql_text LIKE 'SELECT nf.ID_NF%' 4 AND sql_text NOT LIKE '%v$sql%'; SQL_ID CHILD_NUMBER ------------- ------------ 6hu66yktv0xzt 0 SQL > SQL > @xplan 6hu66yktv0xzt PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 6hu66yktv0xzt, child number 0 ------------------------------------- SELECT nf.ID_NF, nf.CLIENTE, nf.DT_EMISSAO, it.QUATIDADE, pr.NOME FROM notafiscal nf, item it, produto pr WHERE nf.ID_NF = it.ID_NF AND it.ID_PRODUTO = pr.ID_PRODUTO AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and sysdate AND pr.ID_PRODUTO between :B1 and :B2 ORDER BY :"SYS_B_1",:"SYS_B_2" Plan hash value: 3275322104 --------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Pid | Ord | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | --------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | | 9 | SELECT STATEMENT | | 1 | | | 38 (100)| | 18 |00:00:00.01 | 112 | | 1 | 0 | 8 | SORT ORDER BY | | 1 | 4 | 276 | 38 (3)| 00:00:01 | 18 |00:00:00.01 | 112 | |* 2 | 1 | 7 | FILTER | | 1 | | | | | 18 |00:00:00.01 | 112 | |* 3 | 2 | 6 | HASH JOIN | | 1 | 4 | 276 | 37 (0)| 00:00:01 | 18 |00:00:00.01 | 112 | |* 4 | 3 | 3 | HASH JOIN | | 1 | 42 | 1848 | 35 (0)| 00:00:01 | 18 |00:00:00.01 | 110 | |* 5 | 4 | 1 | TABLE ACCESS FULL | NOTAFISCAL | 1 | 36 | 1188 | 20 (0)| 00:00:01 | 38 |00:00:00.01 | 64 | |* 6 | 4 | 2 | TABLE ACCESS FULL | ITEM | 1 | 2011 | 22121 | 15 (0)| 00:00:01 | 2017 |00:00:00.01 | 46 | | 7 | 3 | 5 | TABLE ACCESS BY INDEX ROWID| PRODUTO | 1 | 50 | 1250 | 2 (0)| 00:00:01 | 50 |00:00:00.01 | 2 | |* 8 | 7 | 4 | INDEX RANGE SCAN | PRODUTO_PK | 1 | 50 | | 1 (0)| 00:00:01 | 50 |00:00:00.01 | 1 | --------------------------------------------------------------------------------------------------------------------------------------------------- Peeked Binds (identified by position): -------------------------------------- 1 - :SYS_B_0 (NUMBER): 500 2 - :SYS_B_1 (NUMBER): 1 3 - :SYS_B_2 (NUMBER): 50 Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0)) 3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO") 4 - access("NF"."ID_NF"="IT"."ID_NF") 5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!)) 6 - filter(("IT"."ID_PRODUTO"<=:B2 AND "IT"."ID_PRODUTO">=:B1)) 8 - access("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2) About ------ - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net) 42 rows selected. SQL > |
O script “xplan.sql” foi acionado na linha 70 da log acima.
Passando os parâmetros sql_id e sql_child_number
Agora vamos executar uma consulta, obter seu SQL_ID e CHILD_NUMBER para utiliza-los na execução do script “xplan.sql” passando o primeiro parâmetro “sql_id” e o segundo parâmetro “sql_child_number”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | SQL > VARIABLE B1 number; SQL > VARIABLE B2 number; SQL > SQL > EXEC :B1 := 01; PL/SQL procedure successfully completed. SQL > EXEC :B2 := 500; PL/SQL procedure successfully completed. SQL > SQL > SQL > SELECT nf.ID_NF, 2 nf.CLIENTE, 3 nf.DT_EMISSAO, 4 it.QUATIDADE, 5 pr.NOME 6 FROM notafiscal nf, 7 item it, 8 produto pr 9 WHERE nf.ID_NF = it.ID_NF 10 AND it.ID_PRODUTO = pr.ID_PRODUTO 11 AND nf.DT_EMISSAO between sysdate-500 and sysdate 12 AND pr.ID_PRODUTO between :B1 and :B2 13 ORDER BY 1,4; ID_NF CLIENTE DT_EMISSA QUATIDADE NOME ---------- -------------------------------------------------- --------- ---------- -------------------- 9 IXTLXLZGLRZZ9 06-DEC-14 4 YKNGNGJOHJAUFPTNJSNI 9 IXTLXLZGLRZZ9 06-DEC-14 7 YNLNIUCBVWQDLZSBOTJF .................................................... 4773 DCCLXXIIIWDOKMYFTKS4773 06-DEC-14 4 NLUXXQGWCPHQOIVYSXPR 4773 DCCLXXIIIWDOKMYFTKS4773 06-DEC-14 13 LHZXFMSDMNUTQECSJXST 4773 DCCLXXIIIWDOKMYFTKS4773 06-DEC-14 17 AVYODSIJYKOCRCOWTDAD 158 rows selected. SQL > SQL > SQL > SQL > SELECT sql_id, child_number 2 FROM v$sql 3 WHERE sql_text LIKE 'SELECT nf.ID_NF%' 4 AND sql_text NOT LIKE '%v$sql%'; SQL_ID CHILD_NUMBER ------------- ------------ 6hu66yktv0xzt 0 6hu66yktv0xzt 1 SQL > SQL > SQL > @xplan 6hu66yktv0xzt 1 PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 6hu66yktv0xzt, child number 1 ------------------------------------- SELECT nf.ID_NF, nf.CLIENTE, nf.DT_EMISSAO, it.QUATIDADE, pr.NOME FROM notafiscal nf, item it, produto pr WHERE nf.ID_NF = it.ID_NF AND it.ID_PRODUTO = pr.ID_PRODUTO AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and sysdate AND pr.ID_PRODUTO between :B1 and :B2 ORDER BY :"SYS_B_1",:"SYS_B_2" Plan hash value: 1159922978 ------------------------------------------------------------------------------------------------------------------------------------------ | Id | Pid | Ord | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------------------------------------------------------------------ | 0 | | 8 | SELECT STATEMENT | | 1 | | | 40 (100)| | 158 |00:00:00.01 | 115 | | 1 | 0 | 7 | SORT ORDER BY | | 1 | 145 | 10005 | 40 (3)| 00:00:01 | 158 |00:00:00.01 | 115 | |* 2 | 1 | 6 | FILTER | | 1 | | | | | 158 |00:00:00.01 | 115 | |* 3 | 2 | 5 | HASH JOIN | | 1 | 145 | 10005 | 39 (0)| 00:00:01 | 158 |00:00:00.01 | 115 | |* 4 | 3 | 3 | HASH JOIN | | 1 | 145 | 6380 | 35 (0)| 00:00:01 | 158 |00:00:00.01 | 110 | |* 5 | 4 | 1 | TABLE ACCESS FULL| NOTAFISCAL | 1 | 36 | 1188 | 20 (0)| 00:00:01 | 38 |00:00:00.01 | 64 | |* 6 | 4 | 2 | TABLE ACCESS FULL| ITEM | 1 | 20071 | 215K| 15 (0)| 00:00:01 | 20071 |00:00:00.01 | 46 | |* 7 | 3 | 4 | TABLE ACCESS FULL | PRODUTO | 1 | 500 | 12500 | 4 (0)| 00:00:01 | 500 |00:00:00.01 | 5 | ------------------------------------------------------------------------------------------------------------------------------------------ Peeked Binds (identified by position): -------------------------------------- 1 - :SYS_B_0 (NUMBER): 500 2 - :SYS_B_1 (NUMBER): 1 3 - :SYS_B_2 (NUMBER): 500 Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0)) 3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO") 4 - access("NF"."ID_NF"="IT"."ID_NF") 5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!)) 6 - filter(("IT"."ID_PRODUTO">=:B1 AND "IT"."ID_PRODUTO"<=:B2)) 7 - filter(("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2)) About ------ - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net) 41 rows selected. SQL > |
O script “xplan.sql” foi acionado na linha 54 da log acima.
Passando os parâmetros sql_id e plan_format
Para finalizar vamos executar uma consulta e passar para o script “xplan.sql” o primeiro parâmetro “sql_id” e o terceiro parâmetro “plan_format”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | SQL > VARIABLE B1 number; SQL > VARIABLE B2 number; SQL > SQL > EXEC :B1 := 01; PL/SQL procedure successfully completed. SQL > EXEC :B2 := 30; PL/SQL procedure successfully completed. SQL > SQL > SQL > SELECT nf.ID_NF, 2 nf.CLIENTE, 3 nf.DT_EMISSAO, 4 it.QUATIDADE, 5 pr.NOME 6 FROM notafiscal nf, 7 item it, 8 produto pr 9 WHERE nf.ID_NF = it.ID_NF 10 AND it.ID_PRODUTO = pr.ID_PRODUTO 11 AND nf.DT_EMISSAO between sysdate-500 and sysdate 12 AND pr.ID_PRODUTO between :B1 and :B2 13 ORDER BY 1,4; ID_NF CLIENTE DT_EMISSA QUATIDADE NOME ---------- -------------------------------------------------- --------- ---------- -------------------- 9 IXTLXLZGLRZZ9 06-DEC-14 13 UFWWBUYCFLHHPEWDCJZI 93 XCIIIVWRXRVYVDW93 09-DEC-14 8 FADDRUNENHLLSLTXQURR 1486 CDLXXXVINZAWPDPFEG1486 02-DEC-14 14 TTGFJBFYFYOBYXNETOCJ 1921 CMXXITQSUDUVAWK1921 01-DEC-14 4 OWJNSZBBOUOZATMDNYUM 1921 CMXXITQSUDUVAWK1921 01-DEC-14 16 XLIOVPATSBHRHXUMMJSK 2101 CIGJURWGYRYR2101 10-DEC-14 16 OSMSAMQIEOEAXLPGXNWG 2696 DCXCVIDCZJZZKCHL2696 06-DEC-14 14 YKCITKBFLEFLVAHUBHIM 3120 CXXOVFVTVWTKT3120 29-NOV-14 11 MLCUEYBFZRAOOWTAZWYO 3239 CCXXXIXYWHXOMBPKB3239 11-DEC-14 15 FOFDIEQAOEQKCQBLYCEI 4619 DCXIXJQLUGCZVQI4619 06-DEC-14 18 ICDPQWNDSFVJAVKFQPTJ 10 rows selected. SQL > SQL > SQL > SQL > SELECT sql_id, child_number 2 FROM v$sql 3 WHERE sql_text LIKE 'SELECT nf.ID_NF%' 4 AND sql_text NOT LIKE '%v$sql%'; SQL_ID CHILD_NUMBER ------------- ------------ 6hu66yktv0xzt 0 SQL > SQL > SQL > @xplan 6hu66yktv0xzt "" "ADVANCED IOSTATS LAST" PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL_ID 6hu66yktv0xzt, child number 0 ------------------------------------- SELECT nf.ID_NF, nf.CLIENTE, nf.DT_EMISSAO, it.QUATIDADE, pr.NOME FROM notafiscal nf, item it, produto pr WHERE nf.ID_NF = it.ID_NF AND it.ID_PRODUTO = pr.ID_PRODUTO AND nf.DT_EMISSAO between sysdate-:"SYS_B_0" and sysdate AND pr.ID_PRODUTO between :B1 and :B2 ORDER BY :"SYS_B_1",:"SYS_B_2" Plan hash value: 3275322104 --------------------------------------------------------------------------------------------------------------------------------------------------- | Id | Pid | Ord | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | A-Rows | A-Time | Buffers | --------------------------------------------------------------------------------------------------------------------------------------------------- | 0 | | 9 | SELECT STATEMENT | | 1 | | | 38 (100)| | 10 |00:00:00.01 | 112 | | 1 | 0 | 8 | SORT ORDER BY | | 1 | 3 | 207 | 38 (3)| 00:00:01 | 10 |00:00:00.01 | 112 | |* 2 | 1 | 7 | FILTER | | 1 | | | | | 10 |00:00:00.01 | 112 | |* 3 | 2 | 6 | HASH JOIN | | 1 | 3 | 207 | 37 (0)| 00:00:01 | 10 |00:00:00.01 | 112 | |* 4 | 3 | 3 | HASH JOIN | | 1 | 38 | 1672 | 35 (0)| 00:00:01 | 10 |00:00:00.01 | 110 | |* 5 | 4 | 1 | TABLE ACCESS FULL | NOTAFISCAL | 1 | 35 | 1155 | 20 (0)| 00:00:01 | 37 |00:00:00.01 | 64 | |* 6 | 4 | 2 | TABLE ACCESS FULL | ITEM | 1 | 1207 | 13277 | 15 (0)| 00:00:01 | 1229 |00:00:00.01 | 46 | | 7 | 3 | 5 | TABLE ACCESS BY INDEX ROWID| PRODUTO | 1 | 30 | 750 | 2 (0)| 00:00:01 | 30 |00:00:00.01 | 2 | |* 8 | 7 | 4 | INDEX RANGE SCAN | PRODUTO_PK | 1 | 30 | | 1 (0)| 00:00:01 | 30 |00:00:00.01 | 1 | --------------------------------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 5 - SEL$1 / NF@SEL$1 6 - SEL$1 / IT@SEL$1 7 - SEL$1 / PR@SEL$1 8 - SEL$1 / PR@SEL$1 Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$1") FULL(@"SEL$1" "NF"@"SEL$1") FULL(@"SEL$1" "IT"@"SEL$1") INDEX_RS_ASC(@"SEL$1" "PR"@"SEL$1" ("PRODUTO"."ID_PRODUTO")) LEADING(@"SEL$1" "NF"@"SEL$1" "IT"@"SEL$1" "PR"@"SEL$1") USE_HASH(@"SEL$1" "IT"@"SEL$1") USE_HASH(@"SEL$1" "PR"@"SEL$1") END_OUTLINE_DATA */ Peeked Binds (identified by position): -------------------------------------- 1 - :SYS_B_0 (NUMBER): 500 2 - :SYS_B_1 (NUMBER): 1 3 - :SYS_B_2 (NUMBER): 30 Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((:B2>=:B1 AND SYSDATE@!>=SYSDATE@!-:SYS_B_0)) 3 - access("IT"."ID_PRODUTO"="PR"."ID_PRODUTO") 4 - access("NF"."ID_NF"="IT"."ID_NF") 5 - filter(("NF"."DT_EMISSAO">=SYSDATE@!-:SYS_B_0 AND "NF"."DT_EMISSAO"<=SYSDATE@!)) 6 - filter(("IT"."ID_PRODUTO"<=:B2 AND "IT"."ID_PRODUTO">=:B1)) 8 - access("PR"."ID_PRODUTO">=:B1 AND "PR"."ID_PRODUTO"<=:B2) Column Projection Information (identified by operation id): ----------------------------------------------------------- 1 - (#keys=2) "NF"."ID_NF"[NUMBER,22], "IT"."QUATIDADE"[NUMBER,22], "PR"."NOME"[VARCHAR2,20], "NF"."CLIENTE"[VARCHAR2,50], "NF"."DT_EMISSAO"[DATE,7] 2 - "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22], "PR"."NOME"[VARCHAR2,20] 3 - (#keys=1) "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22], "PR"."NOME"[VARCHAR2,20] 4 - (#keys=1) "NF"."ID_NF"[NUMBER,22], "NF"."DT_EMISSAO"[DATE,7], "NF"."CLIENTE"[VARCHAR2,50], "IT"."QUATIDADE"[NUMBER,22], "IT"."ID_PRODUTO"[NUMBER,22] 5 - "NF"."ID_NF"[NUMBER,22], "NF"."CLIENTE"[VARCHAR2,50], "NF"."DT_EMISSAO"[DATE,7] 6 - "IT"."QUATIDADE"[NUMBER,22], "IT"."ID_PRODUTO"[NUMBER,22], "IT"."ID_NF"[NUMBER,22] 7 - "PR"."ID_PRODUTO"[NUMBER,22], "PR"."NOME"[VARCHAR2,20] 8 - "PR".ROWID[ROWID,10], "PR"."ID_PRODUTO"[NUMBER,22] About ------ - XPlan v1.2 by Adrian Billington (http://www.oracle-developer.net) 86 rows selected. SQL > |
O script “xplan.sql” foi acionado na linha 57 da log acima.