将数组传递给oracle过程

将数组传递给oracle过程,第1张

数组传递给oracle过程

这是一个如何做的例子。

以下脚本在数据库中设置表,类型和存储过程。该过程采用数组类型的参数,并将数组的每一行插入表中:

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)ASBEGIN  FOR i IN 1..p_strings.COUNT  LOOP    INSERT INTO strings (s) VALUES (p_strings(i));  END LOOP;END;/

然后,Java代码演示如何将数组传递到此存储过程中:

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

如果先运行SQL脚本,然后运行Java类,然后查询表

strings
,则应该发现所有数据都已插入到表中。

当您说“一个字符数组”时,我猜测您的意思是一个Java数组

char
。如果我猜对了,那么我认为您最好将
char
s
转换为
String
s,然后使用与上述相同的方法。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5487698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存