为什么更改查询不支持以下查询?

我试图通过在Oracle OracleDependency上注册UNIFIED_AUDIT_TABLE来编写一些.NET代码来侦听一部分用户对Oracle DB中的更改。我已经定义了审核策略TEST_AUDIT_POLICY来审核感兴趣的用户的更改。以下代码是我的.NET侦听器:

    private const string TableName = "UNIFIED_AUDIT_TRAIL";
    private const string SelectStatement = "select event_timestamp from " + TableName;

    ...

    public Form1()
    {
        var connection = new OracleConnection(Constr);
        connection.Open();
        var command = connection.CreateCommand();
        try
        {
            var dependency = new OracleDependency(command);
            dependency.OnChange += NotifyTypesChanged;

            command.Notification.IsnotifiedOnce = false;
            command.BindByName = true;
            command.CommandText = SelectStatement;

            new OracleDataAdapter(command)
                {MissingSchemaaction = MissingSchemaaction.AddWithKey}.Fill(DataSet,TableName);
            _dataGrid1.SetDataBinding(DataSet,TableName);
        }
        catch (Exception ex)
        {
        }
    }

运行此代码时,出现以下异常:

Oracle.ManagedDataaccess.Client.OracleException (0x80004005): ORA-29973: Unsupported query or operation  during change notification registration
   at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId,Boolean bThrowArrayBindRelatedErrors,SqlStatementType sqlStatementType,Int32 arrayBindCount,OracleException& exceptionForArrayBindDML,Boolean& hasMoreRowsInDB,Boolean bFirstIterationDone)
   at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl,Int32& cursorId,Boolean bFirstIterationDone)
   at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText,OracleParameterCollection paramColl,CommandType commandType,OracleConnectionImpl connectionImpl,OracleDataReaderImpl& rdrImpl,Int32 longFetchSize,Int64 clientInitialLOBFS,OracleDependencyImpl orclDependencyImpl,Int64[] scnForExecution,Int64[]& scnFromExecution,OracleParameterCollection& bindByPositionParamColl,Boolean& bBindParamPresent,Int64& internalInitialLOBFS,OracleConnection connection,OracleLogicalTransaction& oracleLogicalTransaction,IEnumerable`1 adrianParsedStmt,Boolean isDescribeonly,Boolean isFromEF)
   at Oracle.ManagedDataaccess.Client.OracleCommand.ExecuteReader(Boolean requery,Boolean fillRequest,CommandBehavior behavior)
   at Oracle.ManagedDataaccess.Client.OracleDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand command,CommandBehavior behavior)
   at System.Data.Common.DbdataAdapter.Fill(DataSet dataSet,String srcTable)

我无法听UNIFIED_AUDIT_TABLE上的更改,因为UNIFIED_AUDIT_TABLE不是表,而只是视图?如果是这样,我该如何注册以通知有关TEST_AUDIT_POLICY政策的更改?

iCMS 回答:为什么更改查询不支持以下查询?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1992865.html

大家都在问