0

我有很长的原始数据类型列。想要选择它。例如在屏幕上显示。或者使用 vb6 或 vb.net 将其保存到文件中。我一整天都没有运气。到目前为止有这个代码:

CREATE OR REPLACE FUNCTION longrawtochar(v_raw long raw) return varchar2
is
  rawlen number;
  hex varchar2(32767);
  rawparam varchar2(32767);
  i number;
begin
  hex := rawtohex(v_raw);
  rawlen := length(hex);
  i := 1;
  while i <= rawlen
  loop
    rawparam := rawparam||CHR(to_number((substrb(hex,i,2)),'xx'));
    i := i + 2;
  end loop;
  return rawparam;
end;

但是当我选择它时会非法使用长数据类型。

4

1 回答 1

0

LONG RAW数据类型除了在较新版本的 Oracle PL/SQL 中被弃用外,通常比VARCHAR2最大长度为 32767 字节的长度大得多。如果要显示字段的值(毕竟是二进制数据),为什么不使用 VB.NET SQL 类来选择值,然后将其转储到兼容的数据类型中,例如字节数组,因为显示在屏幕上还是流式传输到文件中?

VB.NET 将允许您使用OracleClient.OracleDataReaderOracleCommand(从 .NET 4.0 开始不推荐使用,但从 .NET 4.5 开始仍然可用)来为您运行查询LONG RAW并将值检索到字节数组中。(请注意,此示例代码来自我的大脑编译器,因为我没有要测试的 Oracle 数据库):

Dim output As Byte()
Using conn As OracleConnection = New OracleConnection(strConnectionString)
    Dim command As New OracleCommand("SELECT MyLongRaw FROM LongRawTable", conn)
    conn.Open()
    Dim reader As OracleDataReader = command.ExecuteReader()

    If reader.Read() Then
        If reader.GetBytes(0, 0, output, 0, reader.GetBytes(0, 0, Nothing, 0, 0)) > 0 Then
        ..Do Something With The Byte Array..
        End If
    End If
End Using

从那里将其发送到内存或文件流以将其输出到文件或其他与流兼容的目标应该是一件简单的事情。

于 2013-08-27T06:31:45.840 回答