Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
C# Oracle日期类型列默认值don';t在c中通过ODP返回#_C#_Oracle_Odp.net - Fatal编程技术网

C# Oracle日期类型列默认值don';t在c中通过ODP返回#

C# Oracle日期类型列默认值don';t在c中通过ODP返回#,c#,oracle,odp.net,C#,Oracle,Odp.net,我正在通过c#和托管OPD连接到oracle数据库。我获取了所有表列,但无法获取日期类型列的默认值。 我应该注意,当我在Oracle SQL Developer中运行相同的查询时,它会显示特定列的默认值 我的代码: public DataTable SelectIntoTable(DbCommand cmd, params object[] values) { if (!SetParamsValues(cmd, values)) retur

我正在通过c#和托管OPD连接到oracle数据库。我获取了所有表列,但无法获取日期类型列的默认值。 我应该注意,当我在Oracle SQL Developer中运行相同的查询时,它会显示特定列的默认值

我的代码:

    public DataTable SelectIntoTable(DbCommand cmd, params object[] values)
    {
        if (!SetParamsValues(cmd, values))
            return null;

        DataSet dataSet = new DataSet();
        DataTable table = new DataTable();
        DbDataAdapter adapter = MakeDataAdapter();
        adapter.AcceptChangesDuringFill = false;
        adapter.SelectCommand = cmd;
        LastException = null;
        try
        {
            if (Type == DataSource.DBSourceType.ORACLE)
            {
                adapter.Fill(dataSet);
                table = dataSet.Tables[0];
            }
            else
            {
                adapter.Fill(table);
            }
        }
        catch (Exception exp)
        {
            OnErrorOccured(exp, cmd);
            table = null;
        }

        return table;
    }
我的问题是:

SELECT COLUMN_ID, COLUMN_NAME, TABLE_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT, IDENTITY_COLUMN
                FROM user_tab_columns WHERE TABLE_NAME IN ('GPS') ORDER BY TABLE_NAME ASC, COLUMN_ID ASC;

Data\u默认值
的数据类型是
LONG
,这总是很难处理,因为它已被弃用多年,几乎不受任何函数的支持

您可以编写这样的函数来获取值。但是,您可以编写几个返回不同数据类型的函数,并根据
data\u TYPE

CREATE OR REPLACE FUNCTION DATE_Default(tabName IN VARCHAR2, colName IN VARCHAR2) RETURN DATE AS 
    res DATE;
BEGIN

    FOR aVal IN (SELECT DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME = tabName AND COLUMN_NAME = colName) LOOP
        EXECUTE IMMEDIATE 'BEGIN :res := '||aVal.DATA_DEFAULT||'; END;' USING OUT res;
    END LOOP;
    RETURN res;

END;

Data\u默认值
的数据类型是
LONG
,这总是很难处理,因为它已被弃用多年,几乎不受任何函数的支持

您可以编写这样的函数来获取值。但是,您可以编写几个返回不同数据类型的函数,并根据
data\u TYPE

CREATE OR REPLACE FUNCTION DATE_Default(tabName IN VARCHAR2, colName IN VARCHAR2) RETURN DATE AS 
    res DATE;
BEGIN

    FOR aVal IN (SELECT DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE TABLE_NAME = tabName AND COLUMN_NAME = colName) LOOP
        EXECUTE IMMEDIATE 'BEGIN :res := '||aVal.DATA_DEFAULT||'; END;' USING OUT res;
    END LOOP;
    RETURN res;

END;

DATA\u默认值
列为
LONG
类型,在ODP中其长度默认为0,我们应该通过此命令更改此值(将
InitialLONGFetchSize
值更改为除0以外的任何值):


cmd.InitialLONGFetchSize=-1

DATA\u默认值
列为
LONG
类型,在ODP中其长度默认为0,我们应该通过此命令更改此值(将
InitialLONGFetchSize
值更改为除0以外的任何值):


cmd.InitialLONGFetchSize=-1

默认值是多少?静态日期或函数,如
SYSDATE
?您所说的“我无法获取默认值”是什么意思?您是否得到了错误或错误的值或什么都没有?我得到的是“”而不是SYSDATE@wernfrieddomschiet什么是默认值?静态日期或函数,如
SYSDATE
?您所说的“我无法获取默认值”是什么意思?您是否收到错误或错误值或什么都没有?我收到“”而不是SYSDATE@WernfriedDomscheitI通过InitialLONGFetchSize管理它并在调用适配器之前为它设置一个值,thanks我通过InitialLONGFetchSize管理它并在调用适配器之前为它设置一个值,谢谢