sql >> Databáze >  >> RDS >> Oracle

předat pole do procedury Oracle

Zde je příklad, jak to udělat.

Následující skript nastaví tabulku, typ a uloženou proceduru v databázi. Procedura převezme parametr typu pole a vloží každý řádek pole do tabulky:

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;
/

Kód Java pak demonstruje předání pole do této uložené procedury:

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();
    }
}

Pokud spustíte skript SQL a poté třídu Java a poté se dotazujete na tabulku strings , měli byste zjistit, že všechna data byla vložena do tabulky.

Když říkáte 'array of chars', hádám, že máte na mysli pole Java char s. Pokud jsem uhodl správně, pak si myslím, že by bylo nejlepší převést char s na String s a poté použijte stejný přístup jako výše.



  1. T-SQL Cast versus Convert

  2. Django nastavení databáze Oracle

  3. Jak identifikovat neplatné (poškozené) hodnoty uložené ve sloupcích Oracle DATE

  4. SYSDATE() vs NOW() v MySQL:Jaký je rozdíl?