从匿名plsql获取varchar数组时出现“ ORA-03115:不支持的网络数据类型或表示形式”错误

从匿名plsql获取varchar数组时出现“ ORA-03115:不支持的网络数据类型或表示形式”错误,第1张

从匿名pl / sql获取varchar数组时出现“ ORA-03115:不支持的网络数据类型或表示形式”错误

java.sql.SQLException:ORA-03115:不支持的网络数据类型或表示形式

这是由以下语句引起的:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

该语句说array将是输出,但没有将实际的Oracle Type名称指定为第三个参数。您可以检查此Oracle
Doc
,以获取有关此信息的更多信息。

我们可以

java.sql.SQLException: ORA-03115: unsupported network datatype orrepresentation
通过添加带有实际Oracle类型名称的第三个参数来修复异常“ ”。在你的情况是
NAMESARRAY

cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");

但是上面的语句在运行时将引发以下异常:

java.sql.SQLException:无效的名称模式:SCOTT.NAMESARRAY

这是因为我们尚未

NAMESARRAY
在DB内部声明类型。上面的例外将用户表示为SCOTT,但是您可以连接到您选择的用户并创建类型。

在数据库中创建类型:

connect scott/tigerCREATE OR REPLACE TYPE namesarray AS VARRAY(5) OF VARCHAr2(10) ;/

创建类型后

NAMESARRAY
,如果我们不更改就执行代码,则会遇到以下错误:

java.sql.SQLException:ORA-06550:第1行,第180列:

PLS-00382:表达式的类型错误ORA-06550:第1行,第173列:

PL / SQL:语句被忽略

该错误是因为我们已经在用户级别定义了类型,但是我们试图在以下代码块内再次创建类型:

String dequeueQuery = "DECLARE " + " type namesarray IS VARRAY(5) OF VARCHAr2(10); " + " names namesarray;" + "   total integer;" + "   BEGIN " + "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " + "   ? := names;"+ " END;";

因此,我们需要从中删除类型声明。

String dequeueQuery = "DECLARE " + " names namesarray;" + "   total integer;" + "   BEGIN " + "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " + "   ? := names;"+ " END;";

如果在编译后执行程序,则将其删除后,我们应该能够看到以下输出:

KavitaPritamAyanRishavAziz

以下是更新的程序:

import java.io.*;import java.sql.*;import oracle.jdbc.*;public class DBQC {   public static void main(String[] args) {   try {      Connection con=null;      Class.forName("oracle.jdbc.OracleDriver");      String connStr = "jdbc:oracle:thin:scott/tiger@//dbhost:1521/dbsrvc";      con=DriverManager.getConnection(connStr);      if(con != null)      {         System.out.println("Connection succeeded");         String dequeueQuery = "DECLARE " + " names namesarray;" + "   total integer;" + "   BEGIN " + "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " + "   ? := names;"+ " END;";         CallableStatement cstmt = null;         con.setAutoCommit(false);         cstmt =(OracleCallableStatement)con.prepareCall(dequeueQuery);         cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");         boolean b = cstmt.execute();         Array arr = cstmt.getArray(1);         String[] recievedArray = (String[]) arr.getArray();         for (int i = 0; i < recievedArray.length; i++)  System.out.println(recievedArray[i]);         con.commit();      }      con.close();    } catch(Exception e){e.printStackTrace();}    }}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存