protected override void ExecuteStatement(ExecutionContext context) { //if (!context.User.CanCreateInSchema(TriggerName.ParentName)) // throw new SecurityException(String.Format("The user '{0}' cannot create in schema '{1}'.", context.User.Name, TriggerName.ParentName)); if (!context.DirectAccess.TableExists(TableName)) { throw new ObjectNotFoundException(TableName); } // TODO: Discover the accessed objects in the Body and verifies the user has the rights if (context.DirectAccess.ObjectExists(DbObjectType.Trigger, TriggerName)) { if (!ReplaceIfExists) { throw new StatementException(String.Format("A trigger named '{0}' already exists.", TriggerName)); } context.DirectAccess.DropObject(DbObjectType.Trigger, TriggerName); } var triggerInfo = new PlSqlTriggerInfo(TriggerName, TableName, EventTime, EventType, Body); if (Status != TriggerStatus.Unknown) { triggerInfo.Status = Status; } context.DirectAccess.CreateObject(triggerInfo); context.DirectAccess.GrantOn(DbObjectType.Trigger, TableName, context.User.Name, PrivilegeSets.SchemaAll, true); }
private void CreateTriggers(IQuery query, ObjectName tableName) { var triggerName = ObjectName.Parse("APP.trigger1"); var eventTime = TriggerEventTime.Before; var eventType = TriggerEventType.Insert | TriggerEventType.Update; var body = new PlSqlBlockStatement(); body.Declarations.Add(new DeclareVariableStatement("a", PrimitiveTypes.Integer())); body.Statements.Add(new AssignVariableStatement(SqlExpression.VariableReference("a"), SqlExpression.Constant(33))); var triggerInfo = new PlSqlTriggerInfo(triggerName, tableName, eventTime, eventType, body); query.Access().CreateObject(triggerInfo); }