问题描述
你好,
此查询返回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;
此查询返回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;
专家解答
它与您无法创建表的原因相同:
即使您正在执行select语句,* 数据类型 * 定义也是固定的。如果需要执行此操作,则可以使用动态SQL,即
但是,如果您沿着这条路走,我建议您提出一小部分大小的离散列表,例如
<30字节将是varchar2(30)
<255将是varchar2(255)
其他一切varchar2(4000)
保持较小的排列数量
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




