gpt4 book ai didi

oracle - 获取 LONG RAW 的长度

转载 作者:行者123 更新时间:2023-12-04 07:44:20 41 4
gpt4 key购买 nike

我有一个数据类型为 LONG RAW 的表.如何确定此列中数据的大小(以字节为单位)?

如果我调用 LENGTH对它起作用,它会引发 ORA-00932: inconsistent datatypes: expected NUMBER got LONG BINARY .

以防万一您认为:UTL_RAW.LENGTH加注 ORA-00997: illegal use of LONG datatype :)

(是的,我知道 LONG RAW 已弃用 - 由于某些可能需要它的旧软件而出现问题)

最佳答案

我认为在 PLSQL 中操作长于 32k 的 LONG RAW 是不可能的。这是一个返回 LONG RAW 长度的 java 过程。

首先,设置:

SQL> CREATE TABLE my_table (ID NUMBER, my_long_raw_column LONG RAW);

Table created

SQL> INSERT INTO my_table VALUES (1, utl_raw.cast_to_raw('123456789'));

1 row inserted

java类(我的java有点生疏):
SQL> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Raw" AS
2 import java.io.*;
3 import java.sql.*;
4 import oracle.jdbc.driver.*;
5
6 public class Raw {
7
8 public static int getLength(int pk) throws SQLException,IOException {
9
10 Connection conn = new OracleDriver().defaultConnection();
11
12 PreparedStatement ps = conn.prepareStatement
13 ( "SELECT my_long_raw_column FROM my_table WHERE id = ?" );
14 ps.setInt( 1, pk);
15 ResultSet rs = ps.executeQuery();
16
17 int len = 0;
18 if (rs.next()) {
19 InputStream is = rs.getBinaryStream(1);
20 int nb = is.read(new byte[1024]);
21 while (nb>0) {
22 len += nb;
23 nb = is.read(new byte[1024]);
24 }
25 } else
26 len = -1;
27
28 rs.close();
29 ps.close();
30
31 return len;
32 }
33 }
34 /

Java created

让我们称之为:
SQL> CREATE OR REPLACE
2 FUNCTION get_lr_length(p_id NUMBER) RETURN NUMBER
3 AS LANGUAGE JAVA
4 NAME 'Raw.getLength(int) return int';
5 /

Function created

SQL> select get_lr_length(id) from my_table;

GET_LR_LENGTH(ID)
-----------------
9

我已经测试了大于 32k 字段的函数,它似乎可以工作。

关于oracle - 获取 LONG RAW 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497238/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com