Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >正在获取ORA-01422: exact fetch返回的行数超过请求的行数

正在获取ORA-01422: exact fetch返回的行数超过请求的行数
EN

Stack Overflow用户
提问于 2014-04-04 06:06:52
回答 1查看 798关注 0票数 0

我在我的过程中发现了"ORA-01422: exact fetch returns than than requested of rows“错误,我搜索了它的解决方案,得到了一个想法,为了解决这种问题,我们必须在我们的过程中使用游标或集合。

我在我的过程中使用了游标,并且logis/技术与普通过程略有不同。因此,我很困惑如何更改过程中的逻辑,以便可以使用集合、记录或批量收集?

谢谢,这是我的程序。

代码语言:javascript
代码运行次数:0
复制
create or replace PROCEDURE DB_TZ_PROC AUTHID CURRENT_USER IS 

V_DBNAME VARCHAR2(20);
V_INSTANCE VARCHAR2(10);
V_TIME VARCHAR2(20);
V_DB_TIME TIMESTAMP(6);
V_SERVER_TZ VARCHAR2(10);
V_RPT_SER_TIME VARCHAR2(50);
V_SERVER_DATE DATE;
V_SESSION_TZ VARCHAR2(30);
V_DBZONE VARCHAR2(10);
V_DATE DATE;
V_ERRORSTRING varchar2(4000);
V_EXEC_STRING VARCHAR2(6000);
TABLE_NAME VARCHAR2(30):='TIMEZONE_DIFF';
INN_EXCEPTION VARCHAR2(30):='INNER_EXCEPTION';
OUT_EXCEPTION VARCHAR2(30):='OUTER_EXCEPTION';


CURSOR DBNAME_CUR IS SELECT DBNAME FROM CRMODDEV.FHM_DB_D WHERE (podname ='xyz');

BEGIN

 OPEN DBNAME_CUR;
LOOP
 FETCH DBNAME_CUR INTO V_DBNAME;
 EXIT WHEN DBNAME_CUR%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE('V_DBNAME1 :'||V_DBNAME);

  BEGIN


 V_EXEC_STRING:='select instance_name,
   startup_time,
   database_default_time,
   server_tz,
   rpt_server_time,
   session_tz, 
   dbtime_zone,
   server_current_date,
   timezone_date
from (select a.inst_id,
    upper(b.instance_name) instance_name,
    to_char(b.startup_time, ''YYYY-MM-DD HH24:MI'') startup_time,
    SYSTIMESTAMP database_default_time,
    substr(to_char(SYSTIMESTAMP), 30) server_tz,
    CURRENT_TIMESTAMP rpt_server_time,
    substr(to_char(CURRENT_TIMESTAMP), 30) session_tz, 
    dbtimezone dbtime_zone,
    to_date(to_char(max(sample_time),''YYYY-MM-DD HH24:MI:SS''),''YYYY-MM-DD HH24:MI:SS'') server_current_date,
    SYSTIMESTAMP AT TIME ZONE ''UTC'' timezone_date 
      from gv$active_session_history@'||V_DBNAME||' a, gv$instance@'||V_DBNAME||' b
    where a.inst_id = b.inst_id
    group by a.inst_id,
    upper(b.instance_name),
    to_char(b.startup_time, ''YYYY-MM-DD HH24:MI''),
    dbtimezone)


    DBMS_OUTPUT.PUT_LINE('V_DBNAME2 :'||V_DBNAME); 

EXECUTE IMMEDIATE  V_EXEC_STRING INTO V_INSTANCE,V_TIME,V_DB_TIME,V_SERVER_TZ,V_RPT_SER_TIME,V_SESSION_TZ,V_DBZONE,V_SERVER_DATE,V_DATE; 


    DBMS_OUTPUT.PUT_LINE('V_INSTANCE:'||V_INSTANCE);
    DBMS_OUTPUT.PUT_LINE('V_SERVER_TZ:'||V_SERVER_TZ);
    DBMS_OUTPUT.PUT_LINE('V_DBZONE:'||V_DBZONE);

  INSERT INTO TIMEZONE_DIFF(DB_INSTANCE,STARTUP_TIME,DATABASE_DEFAULT_TIME,SERVER_TZ,RPT_SERVER_TIME,SESSION_TZ,DBZONE,TIMEZONE_DATE,COLLECTION_DATE) 
VALUES  (V_INSTANCE,V_TIME,V_DB_TIME,V_SERVER_TZ,V_RPT_SER_TIME,V_SESSION_TZ,V_DBZONE,V_DATE,TRUNC(SYSDATE));        

  COMMIT;

  DBMS_OUTPUT.PUT_LINE('V_DBNAME3 :'||V_DBNAME);

  UPDATE TIMEZONE_DIFF SET COLLECTION_DATE=TRUNC(COLLECTION_DATE);               

   COMMIT;

 -- INNER EXCEPTION         
   EXCEPTION

                     WHEN OTHERS THEN                            
       V_ERRORSTRING:= 'INSERT INTO CRMODDEV.TIMEZONE_DIFF_LOG VALUES ('''||V_DBNAME||''','''||TABLE_NAME||''','''||SQLCODE||''','''||SQLERRM||''',SYSDATE,'''||INN_EXCEPTION||''')';
                    EXECUTE IMMEDIATE v_errorstring;
                                          COMMIT;
                   DBMS_OUTPUT.PUT_LINE('DBMS_UTILITY.FORMAT_ERROR_BACKTRACE FOR INNER BLOCK:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);


  END;

 END LOOP;

CLOSE DBNAME_CUR;

 -- OUTER EXCEPTION

 EXCEPTION
           WHEN OTHERS THEN 
V_ERRORSTRING:= 'INSERT INTO CRMODDEV.TIMEZONE_DIFF_LOG VALUES ('''||V_DBNAME||''','''||TABLE_NAME||''','''||SQLCODE||''','''||SQLERRM||''',SYSDATE,'''||OUT_EXCEPTION||''')';
                    EXECUTE IMMEDIATE v_errorstring;
                    COMMIT;
          DBMS_OUTPUT.PUT_LINE('DBMS_UTILITY.FORMAT_ERROR_BACKTRACE FOR OUTER BLOCK:'||DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);


END DB_TZ_PROC;
EN

回答 1

Stack Overflow用户

发布于 2014-04-04 06:18:55

直接的问题似乎是您在V_EXEC_STRING中构建的select语句返回多行。但是,您要尝试将输出提取到EXECUTE IMMEDIATE中的一组标量变量中。可以将所有变量声明为集合,并对这些集合执行BULK COLLECT。但是,既然您所做的只是将结果插入到timezone_diff表中,那么您实际上应该构建一条INSERT ... SELECT语句,这样您就不必费心将任何数据提取到局部变量中。

代码语言:javascript
代码运行次数:0
复制
 V_EXEC_STRING:='INSERT INTO TIMEZONE_DIFF(DB_INSTANCE,STARTUP_TIME,DATABASE_DEFAULT_TIME,' ||             
                '                          SERVER_TZ,RPT_SERVER_TIME,SESSION_TZ,DBZONE,' ||
                '                          TIMEZONE_DATE,COLLECTION_DATE) ' ||
                ' select instance_name, ' ||
                ...

  EXECUTE IMMEDIATE v_exec_string;

我不明白为什么要为插入到CRMODDEV.TIMEZONE_DIFF_LOG中的内容而使用动态SQL,也不明白为什么要在不可重启的进程中在循环中提交。这两件事都不会导致您得到的特定错误,但这两件事都可能在某个时候咬您一口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22854807

复制
相关文章
获取textview行数
如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。
全栈程序员站长
2022/11/17
1.6K0
Mysql获取数据的总行数count(*)很慢
日常开发中,获取数据的总数是很常见的业务场景,但是我们发现随着数据的增长count(*)越来越慢,这个是为什么呢,
小土豆Yuki
2020/10/23
5K0
Mysql获取数据的总行数count(*)很慢
ElementUI获取表格选择的行数据小技巧
Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助网站快速成型. el-tab
SmileNicky
2021/06/09
4K0
ElementUI获取表格选择的行数据小技巧
获取当前执行代码的类、方法、行数信息
package cn.com.infcn.tool.utils; /** * Class工具类 * * @author jijs * @version 1.0 */ public class ClassUtils { /** * 获取调用的类名 * * @return String */ public static String getClassName() { StackTraceElement[] stacktra
java404
2018/06/19
1.6K0
git查看提交行数、删除行数
统计指定用户提交代码情况 git log --author="你的名字" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' - 统计每个人的代码提交情况 git log --format='%aN' | sort -u | whil
HaC
2020/12/30
2.8K0
谁说MySQL单表行数不要超过2000W?
网上看了一篇文章《为什么说MySQL单表行数不要超过2000w》,亲自实践了一下,跟原作者有不同的结论。原文的结论是2000W左右性能会成指数级的下降,而我的结论是:随着数据量成倍地增加,查询的时间也刚好是成倍增加,是成正比的。
用户10002156
2023/08/07
4580
谁说MySQL单表行数不要超过2000W?
Java发送Post请求,获取返回的请求头Header
在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;
chenchenchen
2021/09/06
5.7K0
获取线程池中任务执行数量
通过ThreadPoolExecutor的相关API实时获取线程数量,排队任务数量,执行完成线程数量等信息。
春哥大魔王
2018/07/23
2.9K0
统计java代码行数和jar包中*.class代码的行数
2:统计指定目录下所有的*.jar 包中*.class 文件的代码行数,文件为 JarTotal.java(可单独运行)
全栈程序员站长
2022/07/19
1.4K0
Linux 统计文件的行数
NR,表示awk开始执行程序后所读取的数据行数. awk 'END{print NR}' filename
week
2018/08/24
3.7K0
python读取excel的行数
基于python3.x下 需要包 from openpyxl import load_workbook 代码如下: 1 from openpyxl import load_workbook 2 wb = load_workbook(filename=r'C:\\Users\\Administrator\\Desktop\\库存大表0803.xlsx') ##读取路径 3 ws = wb.get_sheet_by_name("Sheet1") ##读取名字为Sheet1的sheet表 4 num
机器学习和大数据挖掘
2019/07/02
3.3K0
表扫描与索引扫描返回的行数不一致
某个应用最近总出现死锁,其中一些是因为报了索引和数据行存在不匹配的问题,MOS中有如下文档可以参考。 ORA-1499. Table/Index row count mismatch(文档 ID 563070.1) 现象: 使用“validate structure cascade”分析表时报ORA-1499的错误,trace文件中包含“Table/Index row count mismatch”的错误信息。例如: SQL> analyze table test validate structure cascade; analyze table test validate structure cascade * ERROR at line 1: ORA-01499: table/index cross reference failure - see trace file  trace文件中包含: Table/Index row count mismatch  table 6559 : index 10000, 0  Index root = tsn: 6 rdba: 0x01400091 意味着扫描表返回6559行数据,索引扫描返回10000行数据。“Index root”是索引的段头信息。rdba: 0x01400091是相对于数据块地址的索引段头。他是十进制的20971665,Rfile#=5,Block#=145。
bisal
2022/12/01
1.2K0
UILabel显示固定行数的问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53260997
用户1451823
2018/09/13
1.3K0
如何统计Android的代码行数
由于Android Studio自带了代码统计的功能,所以我们可以直接使用命令来统计代码的行数。打开终端,用cd命令 定位到project所在的文件夹,然后调用以下命名就可以把每一个源码文件行数及总数统计出来:
xiangzhihong
2021/12/30
3K0
为什么说MySQL单表行数不要超过2000w?
作为在后端圈开车的多年老司机,是不是经常听到过,“mysql 单表最好不要超过 2000w”,“单表超过 2000w 就要考虑数据迁移了”,“你这个表数据都马上要到 2000w 了,难怪查询速度慢”
码猿技术专栏
2023/05/01
7230
为什么说MySQL单表行数不要超过2000w?
续《表扫描与索引扫描返回的行数不一致》
上篇文章主要介绍了如何从分析表得到的报错,以及trace中的信息,判断表返回的记录与索引返回记录不一致时的处理方式。下面这篇文章则介绍了针对ORA-1499进行问题排查的一些基本方法。
bisal
2022/12/01
8180
傻妞教程-如何获取天行数据服务的Key
4.回到傻妞已安装的插件,点击后面的配置,将Key填入保存即可,设置一个插件key后,其他需要此Key的默认会调用的,也就是不用再去设置其他插件。
季春二九
2023/07/31
4380
MySQL 的 count(*) 的优化,获取千万级数据表的总行数
这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去。找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数。
芋道源码
2019/10/24
3.5K0
JVM 的运行数据区
 栈空间里存放的是局部变量表,动态链接,操作数栈,以及是方法的出口;每个栈帧都会随着方法的开始和结束相应的出栈和入 栈;
矿泉水
2018/05/11
6741
JVM 的运行数据区
点击加载更多

相似问题

ORA-01422 - exact fetch返回的行数超过请求的行数错误

17

ORA-01422: exact fetch在返回INTO时返回的行数超过请求的行数

17

ORA-01422: exact fetch返回的触发器行数超过请求的行数

23

Informe de error ORA-01422: exact fetch返回的行数超过请求的行数

23

ORA-01422: exact fetch返回的行数超过请求的行数)显示触发器

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档