我正在尝试获取列的默认值,但遗憾的是我什么都没得到。 这是我的代码:
'ColumnName is the Column Name in question
'BaseTableName is the Table Name
Dim myCon As New OracleConnection
myCon.ConnectionString = gApp.ConnectString
myCon.Open()
Dim myCmd As New OracleCommand
myCmd.Connection = myCon
myCmd.CommandType = CommandType.Text
myCmd.CommandText = "select data_default " & _
"from all_tab_columns " & _
"where table_name='" & BaseTableName & "' " & _
"and column_name='" & ColumnName & "'"
Dim dr As OracleDataReader
dr = myCmd.ExecuteReader
dr.Read()
Dim val = dr.GetValue(0).ToString
' Dim val = myCmd.ExecuteScalar 'I tried also with executeScalar but it was the same
myCon.Close()
当我在oracle中执行相同的字符串时,它返回一个Long,而long内部则是默认值
如何在长篇内获得原始值?
答案 0 :(得分:0)
假设问题是因为您的环境不支持LONG,您可以创建一个函数来首先将值转换为VARCHAR2。例如:
create table test1(a number default 0);
create or replace function get_data_default(
p_owner varchar2,
p_table_name varchar2,
p_column_name varchar2
) return varchar2 is
v_data_default varchar2(4000);
begin
select data_default
into v_data_default
from all_tab_columns
where owner = p_owner
and table_name = p_table_name
and column_name = p_column_name;
return v_data_default;
end;
/
select get_data_default(USER, 'TEST1', 'A') from dual;
0
如果您对其他列有此问题,可以使该函数更通用,或者您可以查看实用程序以将所有字典LONG转换为CLOB。 Dictionary Long Application可以做到这一点,虽然它会变得非常复杂。