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

meneruskan array ke prosedur Oracle

Berikut ini contoh cara melakukannya.

Skrip berikut menyiapkan tabel, tipe, dan prosedur tersimpan dalam database. Prosedur mengambil parameter dari tipe larik dan menyisipkan setiap baris larik ke dalam tabel:

CREATE TABLE strings (s VARCHAR(4000));

CREATE TYPE t_varchar2_array AS TABLE OF VARCHAR2(4000);
/

CREATE OR REPLACE PROCEDURE p_array_test(
    p_strings      t_varchar2_array
)
AS
BEGIN
  FOR i IN 1..p_strings.COUNT
  LOOP
    INSERT INTO strings (s) VALUES (p_strings(i));
  END LOOP;
END;
/

Kode Java kemudian mendemonstrasikan meneruskan array ke prosedur tersimpan ini:

import java.sql.*;
import oracle.jdbc.*;
import oracle.sql.*;

public class ArrayTest {
    public static void main(String[] args) throws Exception {
        DriverManager.registerDriver(new OracleDriver());
        Connection conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:xe", "user", "pass");

        CallableStatement stmt = conn.prepareCall("BEGIN p_array_test(?); END;");

        // The first parameter here should be the name of the array type.
        // It's been capitalised here since I created it without using
        // double quotes.
        ArrayDescriptor arrDesc =
            ArrayDescriptor.createDescriptor("T_VARCHAR2_ARRAY", conn);

        String[] data = { "one", "two", "three" };
        Array array = new ARRAY(arrDesc, conn, data);
        stmt.setArray(1, array);
        stmt.execute();

        conn.commit();
        conn.close();
    }
}

Jika Anda menjalankan skrip SQL dan kemudian kelas Java, lalu kueri tabel strings , Anda akan menemukan bahwa semua data telah dimasukkan ke dalam tabel.

Ketika Anda mengatakan 'array of chars', saya kira yang Anda maksud adalah array Java char s. Jika tebakan saya benar, maka saya pikir Anda sebaiknya mengonversi char s ke String s dan kemudian menggunakan pendekatan yang sama seperti di atas.



  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 tampilan tanpa kunci utama dengan Entitas

  2. Bisakah kita memperbarui nilai kunci utama dari sebuah tabel?

  3. Ketika saya memanggil PreparedStatement.cancel() dalam aplikasi JDBC, apakah itu benar-benar mematikannya di database Oracle?

  4. Mentor Oracle DBA

  5. Apa itu Oracle Joins (Sql Joins)?