Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 是否可以使用log4net的ADONETAppender将输出参数传递到数据库?_Database_Oracle_Logging_Oracle11g_Log4net - Fatal编程技术网

Database 是否可以使用log4net的ADONETAppender将输出参数传递到数据库?

Database 是否可以使用log4net的ADONETAppender将输出参数传递到数据库?,database,oracle,logging,oracle11g,log4net,Database,Oracle,Logging,Oracle11g,Log4net,我在Oracle存储过程中有一个输出参数,用于记录返回受影响的行数-如果过程成功,则应为1。请注意,我不打算使用日志记录的返回值,但其他过程也有它,并且在其他地方使用它,我希望日志记录过程不会偏离这种模式 然而,我似乎无法: 在Oracle中将输出参数设置为可选 在log4net配置中将该参数指定为输出参数类型 程序类似于: CREATE OR REPLACE PROCEDURE USERS.LOGS_INSERT ( p_Date IN DATE DEFAULT NULL, p_Sou

我在Oracle存储过程中有一个输出参数,用于记录返回受影响的行数-如果过程成功,则应为1。请注意,我不打算使用日志记录的返回值,但其他过程也有它,并且在其他地方使用它,我希望日志记录过程不会偏离这种模式

然而,我似乎无法:

在Oracle中将输出参数设置为可选 在log4net配置中将该参数指定为输出参数类型 程序类似于:

CREATE OR REPLACE PROCEDURE USERS.LOGS_INSERT
(
  p_Date IN DATE DEFAULT NULL,
  p_Source IN VARCHAR2 DEFAULT NULL, 
  p_Host IN VARCHAR2 DEFAULT NULL, 
  p_Level IN VARCHAR2 DEFAULT NULL,
  p_Message IN VARCHAR2 DEFAULT NULL,
  p_Stack_Trace IN VARCHAR2 DEFAULT NULL,
  p_RowsAffected OUT NUMBER
)
AS
BEGIN

  INSERT INTO LOGS (LOG_DATE, LOG_SOURCE, LOG_SOURCE_HOST, LOG_LEVEL, LOG_MESSAGE, LOG_STACK_TRACE)
  VALUES (p_Date, p_Source, p_Host, p_Level, p_Message, p_Stack_Trace);

  p_RowsAffected := SQL%ROWCOUNT;

  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      p_RowsAffected := 0;
    WHEN TOO_MANY_ROWS THEN
      p_RowsAffected := -2;
    WHEN OTHERS THEN
      p_RowsAffected := -1;

END;
/
.config文件包含:

<!-- language: lang-xml -->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <param name="Threshold" value="INFO"/>
  <bufferSize value="1"/>
  <connectionType value="System.Data.OracleClient.OracleConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <commandType value="StoredProcedure"/>
  <parameter>
    <parameterName value="p_Date"/>
    <dbType value="DateTime"/>
    <layout type="log4net.Layout.RawTimeStampLayout"/>
  </parameter>
  <parameter>
    <parameterName value="p_Source"/>
    <dbType value="String"/>
    <size value="255"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{application}"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="p_Host"/>
    <dbType value="String"/>
    <size value="100"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{log4net:HostName}"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="p_Level"/>
    <dbType value="String"/>
    <size value="50"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="p_Message"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="p_Stack_Trace"/>
    <dbType value="String"/>
    <size value="4000"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{stack}"/>
    </layout>
  </parameter>
  <parameter>
    <parameterName value="p_RowsAffected"/>
    <dbType value="Int32"/>
  </parameter>
</appender>

我遗漏了什么吗?

至于OUT参数是否可选,您是正确的-您不能这样做。请注意,必须将变量传递给OUT参数。还要注意的是。分享和享受。我看到了这一点,并将其归类为我在甲骨文中的众多限制,而我在M$SQL Server中没有这些限制。鉴于此限制,上面列出的log4net配置是否应与上面定义的过程一起工作?我不应该以某种方式指定它是log4net的输出参数吗?