暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 与用户定义的类型动态绑定

askTom 2017-07-21
266

问题描述

我正在尝试将dynamicaly sql与用户定义的类型一起使用。我有一个很大的结构,有很多属性,我想分解代码以动态使用用户定义的类型。

我有一张带有结构模型的表...

我尝试了几件事,即:

声明

blk_esta类型是记录 (
代码 _ mone VARCHAR2(1),
编码 _ 原位VARCHAR2(1),
situ_pig VARCHAR2(1),
IMPORTE编号 (11,2)
);

name:= 'codi_mone '; -我从DB获得的第一个字段的名称。
博客 _ esta blk _ esta;

开始

-首次测试
v_sql:= 'select ''e bloq_esta.' | | 名称 | | '来自对偶';
立即执行 (v_sql);

-out: ORA-00905: 缺少关键字

-第二次测试
v_sql:= 'bloq_esta.:b1:= 'e' ';
使用in out bloq_esta执行立即 (v_sql);

-out:PLS-00457: 表达式必须是SQL类型

结束;

有什么想法吗?

代替该解决方案,我认为我还可以遍历用户类型的属性...像一个阵列...blk_esta。(1)...?

专家解答

从SQL接口使用PL/SQL类型时,存在各种限制。它们是 * 不同 * 的引擎。例如,SQL中没有布尔数据类型,但PL/SQL中有

人们通常做的是定义SQL对象类型。例如,代替:

TYPE blk_esta IS RECORD (
codi_mone VARCHAR2(1),
codi_situ VARCHAR2(1),
situ_pig VARCHAR2(1),
IMPORTE NUMBER(11,2) 
);


我们会做一些类似的事情

create or replace type TYPE blk_esta as object (
codi_mone VARCHAR2(1),
codi_situ VARCHAR2(1),
situ_pig VARCHAR2(1),
IMPORTE NUMBER(11,2) 
);


* 可以 * 通过SQL引擎引用。

许多这些限制在12c中被取消,那里的事情更加无缝:

http://docs.oracle.com/database/121/LNPLS/release_changes.htm#GUID-57E439FB-B196-46CB-857C-0ADAB32D9EA0


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论