cx_oracle 怎么建表,如何在python cx_Oracle中创建Oracle用户定义类型?

这个答案是我另一个答案的替代品。另一个答案是一个更好的解决方案,假设返回类型没有任何问题。

此解决方案可以与任何可以对数据库进行SQL调用的语言一起使用。因此,即使您使用的应用程序语言不支持调用PL/SQL函数,您仍然可以获得所需的内容。

如果无法从Oracle数据库中获取某些内容,例如自定义类型或复杂数据集,则可以编写pipelined table function。在

流水线表函数允许您在pl/sql端执行所需的任何操作,并以您选择的表格格式格式化/返回结果。在

然后在应用程序层,您可以从这个函数中选择,就像它是一个表一样。在

我已经a post here解释了如何在NodeJS调用中使用它,但是我修改了这个示例以使用Python。在

在PL/SQL中:

(这不一定要在包中,这只是我使用的示例)/* defined in package spec */

TYPE SearchType IS RECORD (

member_id NUMBER,

dino_name VARCHAR2(400) );

TYPE SearchTypeSet IS TABLE OF SearchType;

/* defined in package body */

FUNCTION text_only(

member_id_p IN INTEGER,

search_string IN VARCHAR2)

RETURN SearchTypeSet PIPELINED

IS

retSet SearchType;

BEGIN

FOR v_rec IN (

SELECT member_id,

dino_name

FROM dd_members

WHERE contains (about_yourself,

search_string) > 0

AND member_id != member_id_p) LOOP

retSet.dino_name := v_rec.dino_name;

retSet.member_id := v_rec.member_id;

pipe ROW (retSet);

END LOOP;

RETURN;

END;

之后,它是一个简单的从应用程序中选择语句。在

在Python中:

^{pr2}$

对于您的特定问题,您可以将对dbms_datapump.get_status的调用包装在一个流水线函数中,而不是在示例中使用select。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值