SQL开发人员和C#代码之间的不同结果

时间:2018-08-04 05:33:54

标签: c# database oracle oracle-sqldeveloper odac

我需要获取oracle中某些表的分区信息

此查询:

select HIGH_VALUE from ALL_TAB_PARTITIONS WHERE TABLE_NAME = 'MyTable'

返回此结果:

  • TO_DATE('2000-01-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR = GREGORIAN')
  • TO_DATE('2018-08-03 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR = GREGORIAN')
  • TO_DATE('2000-01-04 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR = GREGORIAN')
  • TO_DATE('2018-08-09 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR = GREGORIAN')

但是在C#代码中,结果是一个带有4个空字符串项的字符串数组

const string query = "select HIGH_VALUE from ALL_TAB_PARTITIONS WHERE TABLE_NAME = 'MyTable'";
var infos = context
               .Database
               .SqlQuery<string>(query)
               .ToArray();

为什么结果不同?

1 个答案:

答案 0 :(得分:0)

请注意,HIGH_VALUE是LONG数据类型。您需要PL SQL来检索值并使用它:

DECLARE
  v_high_value varchar2(32762);
BEGIN
  select  high_value into  v_high_value
     from all_tab_partitions where table_name = 'MyTable'
     and rownum<=1;

  DBMS_OUTPUT.put_line( 'first partition high value is :'||v_high_value);
END;
/

您可以编写一个进行转换的oracle函数,并在C#中使用它。