首页 > 数据库 >oracledb处理游标中的对象类型数据

oracledb处理游标中的对象类型数据

时间:2023-06-15 16:12:00浏览次数:35  
标签:cursor TY 对象 text 游标 oracledb RESULT col

如果Oracle定义了以下对象类型

1 CREATE OR REPLACE TYPE "TY_RESULT" 
2 AS OBJECT
3 (
4     item CHAR(8), 
5     cnt NUMBER(20),
6 
7     --构造空对象
8     CONSTRUCTOR FUNCTION TY_RESULT RETURN SELF AS RESULT,
9 );

并用于存储过程的返回,放在ref cursor中

 

用以下方法来获取游标输出的列名

[col[0] for col in cursor.description]
 

因为输出的是一个对象,而不是一个普通列,所以得到的列名格式为:TY_RESULT(ITEM,  CNT)

如果想写一个不在乎列名的程序,那么必须要得到TY_RESULT的属性列表,也就是(ITEM,  CNT),可以通过一个简单的字符提取来实现

1 text = cursor.description[0][0]
2 low = text.find('(')
3 high = text.rfind(')')
4 attrs = text[low+1, high].split(',')

 

这样就可以用一个通用的代码来使用对象TY_RESULT的值(假设游标只输出TY_RESULT对象)

1 for r, in cursor:
2     for attr in attrs:
3         print(r.__getattr__(attr))

 

但这里有个陷阱:[col[0] for col in cursor.description]中的col[0]是TY_RESULT的字符串表示,格式为前面提到的:TY_RESULT(ITEM,  CNT)
在范例代码中没有问题
但col[0]是有长度限制的
当列很多时,将只能显示部分列

因此,获取TY_RESULT的属性的正确方式应该是下面的代码

1 result_type = conn.gettype(params['o_cursor_type_name'])
2 attrs = [e.name for e in result_type.attributes]

 

标签:cursor,TY,对象,text,游标,oracledb,RESULT,col
From: https://www.cnblogs.com/sqxy110/p/17483167.html

相关文章

  • 面向对象编程-获取对象信息
    获取对象类型使用type()type(123)<class'int'>type('str')<class'str'>type(None)<type(None)'NoneType'>type(abs)<class'builtin_function_or_method'>type(a)<class'......
  • 如何寻找 C++ 程序中的大对象?
    问题背景大型应用程序中包含成千上万个C++对象,这些对象大小如何?有没有一些大对象很废?例如,在OceanBase0.4开源版本中Top10的大对象,最大的一个占58MB内存:排序大小类名158,720,304rootserver::ObRootTable2220,163,008updateserver::ObUpdateServerMain320,15......
  • 如何通过Java中的对象值来同步块
    问题有时,我们需要通过变量的值来同步代码块。为了解这个问题,我们将考虑一个简单的银行应用程序,它对客户的每次转账进行以下操作:通过此外部Web服务转移评估现金返还金额(CashBackService)在数据库中执行汇款(AccountService)更新现金返还评估系统中的数据(CashBackService)汇款操作如下:pub......
  • [从jQuery看JavaScript]-数据类型和对象(Type and Object)(一)
    jQuery片段:1.var2.//Willspeedupreferencestowindow,andallowsmungingitsname.3.window=this,4.//Willspeedupreferencestoundefined,andallowsmungingitsname.5.undefined,6.//MapoverjQueryincas......
  • javaScript 对象与数组参考
    javaScript对象与数组参考本文列举了各种JavaScript对象与数组,同时包括对上述每一对象或数组所完成工作的简短描述,以及与其相关的属性方法,以及事件处理程序,还注明了该对象或数组的父对象用户同样可能需要参考OnlineCompanion中的超级文本ObjectHierarchy页面(http://ww......
  • DOM4J 工具类(以对象的方式增加和删除XML元素)
    packagenet.better_best.www.dynamicADPics.utils;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.dom4j.Attribute;......
  • 面向对象编程-类和实例
    定义类通过class关键字,类名通常是大写开头的单词,(object)表示这个类从哪个类继承下来,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类点击查看代码classStudent(object):pass创建好类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现......
  • MySQL数据库运维实录--通过MySQL Shell Dump/Load 实现数据库对象的逻辑备份与恢复
    [mysql@node01~]$mysqlshMySQLJS>\connectroot@node01:3306MySQLnode01:3306sslJS>util.dumpInstance('/home/mysql/backup')[mysql@node01~]$scp-rbackup/*node02:/home/mysql/backup/util.dumpInstance的关键特性1,多线程备份。并发线程数由thr......
  • 类与对象
    1、类和对象是什么?类:是共同特征的描述(设计图);对象:是真实存在的具体实例。 2、如何得到对象?//创建对象publicclass类名{1.成员变量(代表属性的,一般是名词)2.成员方法(代表行为的,一般是动词)}//使用对象类名对象名=......
  • 浅谈 .NET 中的对象引用、非托管指针和托管指针
    目录前言一、对象引用二、值传递和引用传递三、初识托管指针和非托管指针四、非托管指针1、非托管指针不能指向对象引用2、类成员指针五、托管指针 前言#本文主要是以C#为例介绍.NET中的三种指针类型(本文不包含对于函数指针的介绍):对象引用、非托管指针、......