Intera????o com o sistema de depend??ncias

O Derby acompanha internamente as depend??ncias das instru????es preparadas, que s??o instru????es SQL pr??-compiladas antes de serem executadas. S??o tipicamente preparadas (pr??-compiladas) uma vez, e executadas v??rias vezes.

As instru????es preparadas dependem de objetos do dicion??rio, e de instru????es referenciadas pelas mesmas (Os objetos do dicion??rio incluem tabelas, colunas, restri????es, ??ndices, vis??es e gatilhos). A remo????o ou modifica????o de objetos do dicion??rio ou de instru????es que a instru????o preparada depende a invalida internamente, significando que o Derby vai tentar recompilar automaticamente a instru????o quando esta for executada. Se a recompila????o da instru????o n??o for bem-sucedida, o pedido de execu????o falhar??. Entretanto, se for tomada alguma a????o para restaurar a depend??ncia quebrada (como a restaura????o da tabela que falta), a instru????o preparada poder?? ser executada, porque o Derby ir?? recompil??-la automaticamente no pr??ximo pedido de execu????o.

As instru????es dependem umas das outras; uma instru????o UPDATE WHERE CURRENT depende da instru????o referenciada. Remover a instru????o da qual esta depende, invalida a instru????o UPDATE WHERE CURRENT.

Al??m disso, as instru????es preparadas n??o permitem a execu????o de certas instru????es de DDL quando existem conjuntos de resultados abertos para as mesmas.

As p??ginas do manual de cada instru????o detalham quais a????es invalidam a instru????o, caso esteja preparada.

Abaixo segue um exemplo utilizando a ferramenta ij do Derby:
ij> CREATE TABLE MINHA_TABELA (MINHA_COLUNA INT);
0 rows inserted/updated/deleted
ij> INSERT INTO MINHA_TABELA VALUES (1), (2), (3);
3 rows inserted/updated/deleted
-- este exemplo utiliza o comando prepare do ij,
-- que prepara a instru????o
ij> prepare p1 AS 'INSERT INTO MINHA_TABELA VALUES (4)';
-- p1 depende de MINHA_TABELA;
ij> execute p1;
1 row inserted/updated/deleted
-- O Derby  executa sem recompilar
ij> CREATE INDEX I1 ON MINHA_TABELA(MINHA_COLUNA);
0 rows inserted/updated/deleted
-- p1 est?? temporariamente inv??lido por causa do novo ??ndice
ij> execute p1;
1 row inserted/updated/deleted
-- O Derby recompila automaticamente e executa p1
ij> DROP TABLE MINHA_TABELA;
0 rows inserted/updated/deleted
-- O Derby  permite remover a tabela
-- porque o conjunto de resultados de p1 est?? fechado,
-- entretanto a instru????o p1 est?? temporariamente inv??lida
ij> CREATE TABLE MINHA_TABELA (MINHA_COLUNA INT);
0 rows inserted/updated/deleted
ij> INSERT INTO MINHA_TABELA VALUES (1), (2), (3);
3 rows inserted/updated/deleted
ij> execute p1;
1 row inserted/updated/deleted
-- Como p1 est?? inv??lida, o Derby tenta recompilar
-- antes de executar.
-- ?? bem-sucedido e executa.
ij> DROP TABLE MINHA_TABELA;
0 rows inserted/updated/deleted
-- a instru????o p1 agora est?? inv??lida,
-- e desta vez a tentativa de recompilar
-- na hora de executar vai falhar
ij> execute p1;
ERROR 42X05: Table/View 'MINHA_TABELA' does not exist.
Conceitos relacionados
Instru????es CREATE
Instru????es DROP
Instru????es RENAME
Instru????es SET
Refer??ncias relacionadas
Instru????o ALTER TABLE
CALL (PROCEDIMENTO)
Cl??usula CONSTRAINT
Instru????o DECLARE GLOBAL TEMPORARY TABLE
Instru????o DELETE
Cl??usula FOR UPDATE
Cl??usula FROM
Cl??usula GROUP BY
Cl??usula HAVING
INNER JOIN
Instru????o INSERT
Opera????o JOIN
LEFT OUTER JOIN
Instru????o LOCK TABLE
Cl??usula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
Express??oSele????o
Instru????o SELECT
Express??oTabela
SubconsultaTabela
Instru????o UPDATE
VALUES Express??o
Cl??usula WHERE
Cl??usula WHERE CURRENT OF