1

列のデフォルト値を取得しようとしていますが、残念ながら何も取得しません。これが私のコードです:

'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内がデフォルト値になります。 オラクルの結果

ロング内の元の値を取得するにはどうすればよいですか?

4

1 に答える 1

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 authid current_user 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アプリケーションはこれを実行できますが、非常に複雑になる可能性があります。

于 2012-11-08T19:40:32.873 に答える