Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Dapatkan PANJANG dari RAW PANJANG

Saya tidak berpikir itu mungkin untuk memanipulasi RAW PANJANG yang lebih panjang dari 32k di PLSQL. Berikut adalah prosedur java yang mengembalikan panjang RAW PANJANG.

Pertama, pengaturannya:

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

Kelas java (java saya agak berkarat):

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

Sebut saja:

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

Saya telah menguji fungsi dengan bidang yang lebih besar dari 32k dan tampaknya berfungsi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Oracle menggabungkan tiga tabel menjadi satu dengan PIVOT

  2. ORA-00604 ORA-12705

  3. Bagaimana mengatasi ekspresi yang hilang ORA-00936

  4. Bagaimana saya bisa menghindari kesalahan panjang variabel mentah yang terlalu panjang di SQL Developer?

  5. Cara Mendaftar Semua Tabel di Oracle