sql >> Database >  >> RDS >> Oracle

Krijg de LENGTE van een LANGE RAW

Ik denk niet dat het mogelijk is om LANGE RAW's langer dan 32k in PLSQL te manipuleren. Hier is een Java-procedure die de lengte van een LANG RAW retourneert.

Eerst de setup:

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

De java-klasse (mijn java is een beetje roestig):

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

Laten we het noemen:

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

Ik heb de functie getest met meer dan 32k velden en het lijkt te werken.



  1. MySQL:rijen selecteren waar een kolom nul is

  2. Minimale waarden in kolommen vinden

  3. Maak customer business intelligence mogelijk via gegevenscatalogi, zakelijke woordenlijsten en gegevensbeheer

  4. Niet alle parameters zijn gebruikt in de SQL-instructie (Python, MySQL)