【问题标题】:SQL Error when I scroll down the results向下滚动结果时出现 SQL 错误
【发布时间】:2011-03-22 07:29:25
【问题描述】:

我有一个这样的SQL; (在 Oracle SQL Developer 中)

SELECT A.HESAP_NO, A.TEKLIF_NO1 || '/' || A.TEKLIF_NO2 AS TEKLIF, A.MUS_K_ISIM, 
B.MARKA, C.SASI_NO, C.SASI_DURUM, D.TAS_MAR, RISK_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.SASI_NO) AS RISK,
MV_SASI(A.TEKLIF_NO1, A.TEKLIF_NO2, C.SASI_NO, SYSDATE) AS MV
FROM S_TEKLIF A,  S_URUN B, S_URUN_DETAY C, KOC_KTMAR_PR D
WHERE A.TEKLIF_NO1 || A.TEKLIF_NO2 = B.TEKLIF_NO1 || B.TEKLIF_NO2
AND A.TEKLIF_NO1 || A.TEKLIF_NO2 = C.TEKLIF_NO1 || C.TEKLIF_NO2
AND B.SIRA_NO = C.URUN_SIRA_NO
AND B.DISTRIBUTOR = D.DIST_KOD
AND B.MARKA = D.MARKA_KOD
AND B.URUN_KOD = D.TAS_KOD

结果是;

通过此步骤,当我向下滚动在结果中时没有错误,我收到如下错误:

ORA-01422:精确提取返回的行数多于请求的行数
ORA-06512:在“MARDATA.RISK_SASI”,第 28 行
01422. 00000 - “精确提取返回的行数超过了请求的行数”
*原因:exact fetch中指定的数量小于返回的行数。
*操作:重写查询或更改请求的行数

我该如何解决这个问题?

【问题讨论】:

    标签: sql database oracle


    【解决方案1】:

    查看您的 RISK_SASI 函数。 我没有看到它,但我猜在第 28 行你会发现类似这样的东西

    SELECT <something> into <some variables>
    FROM <somewhere>
    WHERE <some condition>
    

    当满足“某些条件”的行不止一行时,您会得到 ORA-01422。如果我的猜测是正确的,您应该更正此语句以准确返回一行。

    该错误仅针对 A.TEKLIF_NO1、A.TEKLIF_NO2、C.SASI_NO 的某些特定值出现,这就是为什么您在获取前几行时没有此错误(向下滚动时会获取记录)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      相关资源
      最近更新 更多