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

Oracle 铸造动态变量2尺寸

ASKTOM 2020-05-12
311

问题描述

你好,

此查询返回ORA-00910: 指定长度对于其数据类型来说太长。你能帮我理解为什么吗?


VAR SYS_B_000号;
执行: 系统b_000: = 25;

-按预期返回25
选择: SYS_B_000从对偶;

-此错误与ORA-00914消息
选择强制转换 ('HELLO' 作为VARCHAR2(:SYS_B_000)) 作为对偶的couponid;


此查询运行正常:

VAR SYS_B_000号;
执行: 系统b_000: = 25;

选择: SYS_B_000从对偶;
从对偶选择cast ('HELLO' 作为VARCHAR2(25)) 作为couponid;

专家解答

它与您无法创建表的原因相同:

create table T ( x varchar2(:bind));


即使您正在执行select语句,* 数据类型 * 定义也是固定的。如果需要执行此操作,则可以使用动态SQL,即

open my_cursor for 'select cast (mycol AS VARCHAR2('||:SYS_B_000||')) AS couponid from mytable';


但是,如果您沿着这条路走,我建议您提出一小部分大小的离散列表,例如

<30字节将是varchar2(30)
<255将是varchar2(255)
其他一切varchar2(4000)

保持较小的排列数量
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论