Thanks for catching this Dan. DDL in Transaction is supported as per the manual: A schema manipulation statement (DDL) is not automatically committed when it is performed, but participates in the transaction within which it is issued.
http://db.apache.org/derby/docs/dev/devguide/devguide-single.html#cdevconcepts19173 Then, I don't know why the restriction is there in the code to prevent DDL in a trigger context. I checked the ANSI SQL-2003 specs and I haven't seen (at least obvious) restrictions of schema manipulation/change statement within some trigger action context. If anyone knows... The comments in the code are not saying much about the reason for the restriction: java/engine/org/apache/derby/impl/sql/execute/InternalTriggerExecutionContext.java /** * Make sure that whatever statement is about to be executed * is ok from the context of this trigger. * <p> * Note that we are sub classed in replication for checks * for replication specific language. * * @param constantAction the constant action of the action * that we are to validate * * @exception StandardException on error */ public void validateStatement(ConstantAction constantAction) throws StandardException { // DDL statements are not allowed in triggers. Direct use of DDL // statements in a trigger's action statement is disallowed by the // parser. However, this runtime check is needed to prevent execution // of DDL statements by procedures within a trigger context. if (constantAction instanceof DDLConstantAction) { throw StandardException.newException( SQLState.LANG_NO_DDL_IN_TRIGGER, triggerd.getName(), constantAction.toString ()); } // No INSERT/UPDATE/DELETE for a before trigger. There is no need to // check this here because parser does not allow these DML statements // in a trigger's action statement in a before trigger. Parser also // disallows creation of before triggers calling procedures that modify // SQL data. } --francois On 8/20/07, Daniel John Debrunner <[EMAIL PROTECTED]> wrote: > > Francois Orsini wrote: > > Javier, > > > > I guess and I may be wrong that the main reason for not allowing DDL > > operation in a trigger is due to the fact that a DDL operation will get > > implicitly committed, > > DDL is not implicitly committed in Derby. > > Dan. >
