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.
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.