栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号