ORA-01007: variable not in select list(选择列表中没有变量)

本文解析了ORA-01007错误的原因及解决方案,指出当使用动态指针时,若记录中定义的变量与SQL指针变量不一致,则会触发此错误。并提供了具体的检查和修正步骤。

并发程序报错:ORA-01007: variable not in select list(选择列表中没有变量) 以及相关动态指针写法

 

 网上的解决方法:

Cause:A reference was made to a variable not listed in the SELECT clause. In OCI, this can occur if the number passed for the position parameter is less than one or greater than the number of variables in the SELECT clause in any of the following calls: DESCRIBE, NAME, or DEFINE. In SQL*Forms or SQL*Report, specifying more variables in an INTO clause than in the SELECT clause also causes this error.
Action:Determine which of the problems listed caused the problem and take appropriate action.

select语句本身没有问题,错误原因是:在构造游标时数据个数不一致。比如,一个表TA有3个域A,B,C。我们构造查询语句为:SELECT A FROM TA WHERE B='12' AND C='12'。但是在构造游标时,使用了EXEC SQL FETCH table_cursor INTO :A,:B,:C;,而不是EXEC SQL FETCH table_cursor INTO :A;。这样变量数目就不一致,会导致错误。

 

实际的问题:在使用动态指针的时候,将资料指到对应的SQL  并且fetch into  相对应的 record 类型,但是此记录定义的变量与SQL指针的变量不一致导致的。

 

转自:http://www.cnblogs.com/toowang/archive/2012/04/19/2456803.html

在创建Oracle Spatial索引时,遇到的ORA-29855、ORA-13249、ORA-13200、ORA-13206和ORA-13365错误通常与空间索引的配置、元数据不一致或底层数据库对象的损坏有关。以下是对这些错误的详细分析和解决方案: ### ORA-29855: Error occurred in the execution of ODCIINDEXCREATE routine 该错误表明在创建域索引(如空间索引)时,底层的`ODCIIndexCreate`方法执行失败。常见于空间索引创建失败的场景中,通常由后续错误链中的具体错误引发,例如ORA-13249[^1]。 ### ORA-13249: internal error in Spatial index: [mdsys.mditopology] 该错误表示在空间索引构建过程中,内部拓扑结构处理失败。常见于空间元数据不一致、几何对象损坏或索引参数配置不当的情况。例如,用户定义的空间表未正确注册到`USER_SDO_GEOM_METADATA`视图中,或几何对象的SRID不一致[^1]。 ### ORA-13200: Physical storage parameters are invalid for the spatial index 此错误通常发生在空间索引的物理存储参数(如`TABLESPACE`、`INITIAL`、`NEXT`等)配置不合法时。例如,表空间不存在、存储参数值不合理或索引分区定义错误。应检查索引创建语句中的存储参数是否符合Oracle的限制。 ### ORA-13206: internal error in spatial index creation 该错误表示在空间索引构建过程中出现内部错误,通常与数据质量问题有关。例如,几何对象包含非法坐标、多边形不闭合或存在自相交等问题。建议使用`SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT`函数验证数据的完整性[^1]。 ### ORA-13365: layer does not exist 此错误表明在创建空间索引时,指定的空间图层(即对应的几何列)未正确注册到Oracle Spatial元数据中。应确保几何列已在`USER_SDO_GEOM_METADATA`中正确定义,并且其`TABLE_NAME`和`COLUMN_NAME`与实际表和列名一致。 ### 解决方案示例 1. **验证几何数据的完整性**: 使用以下SQL语句验证几何列的数据是否有效: ```sql SELECT b.geometry, SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(b.geometry, 0.005) FROM your_table b; ``` 如果返回非`TRUE`的结果,则需修复对应的几何对象。 2. **检查空间元数据注册**: 确保几何列已在`USER_SDO_GEOM_METADATA`中注册: ```sql SELECT * FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'YOUR_TABLE'; ``` 如果未注册,需使用以下语句添加: ```sql INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) VALUES ('YOUR_TABLE', 'GEOMETRY_COLUMN', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 0, 100, 0.005), MDSYS.SDO_DIM_ELEMENT('Y', 0, 100, 0.005)), 8307); ``` 3. **调整索引存储参数**: 检查并调整空间索引的存储参数,确保表空间存在且参数合理: ```sql CREATE INDEX idx_spatial ON your_table(geometry_column) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ('tablespace=USERS storage(initial 1M next 1M)'); ``` 4. **重建空间索引**: 如果索引已存在但出现错误,可尝试删除并重新创建: ```sql DROP INDEX idx_spatial; CREATE INDEX idx_spatial ON your_table(geometry_column) INDEXTYPE IS MDSYS.SPATIAL_INDEX; ``` 5. **检查模式名称长度**: 如果使用`st_geometry`类型(如ArcGIS环境),需注意模式名称和索引名称的总长度不应超过32个字符,以避免内部变量溢出导致的错误。 ### 总结 上述错误通常与空间数据质量、元数据配置或索引参数设置不当有关。通过验证几何数据完整性、正确注册元数据、合理配置存储参数及避免模式名称过长等措施,可有效解决这些问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值