示例#1
0
        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.User.CanExecuteProcedure(new Invoke(ProcedureName, ProcedureArguments), context.Request))
            //	throw new MissingPrivilegesException(context.User.Name, ProcedureName, Privileges.Execute);

            if (!context.DirectAccess.TableExists(TableName))
            {
                throw new ObjectNotFoundException(TableName);
            }

            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 ProcedureTriggerInfo(TriggerName, TableName, EventTime, EventType, ProcedureName, ProcedureArguments);

            if (Status != TriggerStatus.Unknown)
            {
                triggerInfo.Status = Status;
            }

            context.DirectAccess.CreateObject(triggerInfo);
            //context.DirectAccess.GrantOn(DbObjectType.Trigger, TableName, context.User.Name, PrivilegeSets.SchemaAll, true);
        }
示例#2
0
        private void CreateProcedureTrigger(IQuery query, ObjectName tableName)
        {
            var procedurName = ObjectName.Parse("APP.proc1");
            var body         = new PlSqlBlockStatement();

            body.Declarations.Add(new DeclareVariableStatement("a", PrimitiveTypes.Integer()));
            body.Statements.Add(new AssignVariableStatement(SqlExpression.VariableReference("a"), SqlExpression.Constant(33)));
            var procedureInfo = new PlSqlProcedureInfo(procedurName, new RoutineParameter[0], body);

            query.Access().CreateObject(procedureInfo);

            var triggerName = ObjectName.Parse("APP.trigger2");
            var eventTime   = TriggerEventTime.After;
            var eventType   = TriggerEventType.Insert | TriggerEventType.Update;

            var triggerInfo = new ProcedureTriggerInfo(triggerName, tableName, eventTime, eventType, procedurName);

            query.Access().CreateObject(triggerInfo);
        }