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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

你遇到的错误信息: ``` ORA-24324: service handle not initialized ORA-24323: value not allowed ORA-01089: immediate shutdown in progress - no operations are permitted ``` 表示你正在尝试执行 `SHUTDOWN IMMEDIATE`,但数据库已经处于**关闭过程中**(shutdown in progress),或者你的会话没有正确连接到数据库实例。 --- ### ✅ 错误原因分析 1. **ORA-01089: immediate shutdown in progress** 这是核心错误:数据库**已经在关闭过程中**。Oracle 不允许在关闭过程中再次执行 `SHUTDOWN` 命令或任何其他操作。 2. **ORA-24324 / ORA-24323** 这两个错误通常是由于客户端尝试使用一个已经失效或未正确初始化的服务上下文(service handle)进行通信。这通常是因为: - 实例已经开始关闭,后台进程正在终止。 - 客户端连接被中断或失效。 --- ### ✅ 正确处理方式 #### 情况 1:你刚刚执行了 `SHUTDOWN IMMEDIATE`,又运行了一次 ✅ **这是正常现象**。`SHUTDOWN IMMEDIATE` 是一个异步命令,一旦发出,数据库开始关闭进程。如果你快速按回车再次执行,就会看到这个错误。 👉 **解决方案**:无需操作,等待数据库完全关闭即可。 ```sql SQL> shutdown immediate; -- 等待,直到提示 Database closed. Database dismounted. ORACLE instance shut down. -- 不要重复执行 ``` #### 情况 2:数据库卡住,无法关闭 有时 `SHUTDOWN IMMEDIATE` 执行后长时间无响应,可能因为: - 某些会话长时间未断开。 - 存在长事务未结束。 ##### 解决方案:强制关闭(最后手段) ```sql SQL> shutdown abort; ``` > ⚠️ 注意:`SHUTDOWN ABORT` 类似于断电,不会做检查点或写数据文件,下次启动时需要实例恢复(Instance Recovery),但它是安全的(只要 redo log 完好)。 然后重新启动数据库以完成清理: ```sql SQL> startup; ``` --- ### ✅ 推荐的标准关闭流程 ```sql -- 1. 连接到数据库作为 DBA SQL> connect / as sysdba -- 2. 正常关闭 SQL> shutdown immediate; -- 3. 启动(如果需要) SQL> startup; ``` --- ### ✅ 如何确认数据库是否正在关闭? 你可以通过查看后台进程或告警日志来判断: ```bash # 查看 Oracle 进程是否存在 ps -ef | grep pmon ps -ef | grep smon ``` 如果没有 `pmon` 进程,说明实例已关闭。 或者查看告警日志(alert log): ```bash cd $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace/ tail -f alert_$ORACLE_SID.log ``` 你会看到类似: ``` Shutting down instance (immediate) ... Instance terminated. ``` --- ### ✅ 总结 | 错误 | 含义 | 应对措施 | |------|------|----------| | ORA-01089 | 关闭中,禁止操作 | 等待或使用 `SHUTDOWN ABORT` 强制中断 | | ORA-24324/24323 | 服务句柄无效 | 通常是关闭过程中的副作用,无需处理 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值