C# Oracle日期类型列默认值don';t在c中通过ODP返回#
我正在通过c#和托管OPD连接到oracle数据库。我获取了所有表列,但无法获取日期类型列的默认值。 我应该注意,当我在Oracle SQL Developer中运行相同的查询时,它会显示特定列的默认值 我的代码: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
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管理它并在调用适配器之前为它设置一个值,谢谢