SQL:找不到记录。处理没有发现错误

时间:2018-02-06 12:21:21

标签: sql oracle

我创建了这个SQL代码,因为我需要对ISIN的特定列表进行排名。因此,我一直在使用以下代码来获得结果:

<div class="container">
  <div class="row">
      <div class="col-md-12 mt-5">
          <button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="top" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ipse Epicurus fortasse redderet, ut Sextus Peducaeus, Sex. Si quae forte-possumus. Iam id ipsum absurdum, maximum malum neglegi. Traditur, inquit, ab Epicuro ratio neglegendi doloris. Deinde dolorem quem maximum?">
            Tooltip
          </button>
      </div>
  </div>
</div>

我发现'没有记录'..这显然是错误的并且表明查询有问题....任何建议?

var r refcursor;

begin
   msa.exl_stifel_ms ('01/01/2017',
                      '21/01/2018',
                      'GBP',
                      'CB',
                      'JE00BYR8GK67',
                      'UBS',
                      :r);
end;

1 个答案:

答案 0 :(得分:1)

除非我错了:

select brokerid
     into inbrokerid
     from msa.client
    where clientname = inbroker

是唯一可以返回NO-DATA-FOUND的SELECT(如果这就是你所说的“没有找到记录”)。其他SELECT是INSERT或UPDATE语句的一部分,因此它们不会做任何事情,但也不会引发错误。

你也打电话给rp_calctrnbicdetailtotals - 我不知道它做了什么,但是 - 它也可能是错误的候选人。

尝试在SQL * Plus中运行该代码,它会告诉您错误的确切位置(PL / SQL对象名称,行号),以便您可以修复它。确保删除所有WHEN OTHERS异常处理程序(如果有的话)。

[编辑,看到@ kfinity的评论后]

正如我所说,我认为不是。这是一个例子;第一个SELECT返回 nothing ,没有员工EMPNO = -1(所以,正如你所说,它将返回no-data-found):

SQL> var pe refcursor
SQL> create or replace procedure p_test (test out sys_refcursor) is
  2  begin
  3    open test for
  4      select ename
  5        from emp
  6        where empno = -1;
  7  end;
  8  /

Procedure created.

SQL> exec p_test (:pe)

PL/SQL procedure successfully completed.

SQL> print pe

no rows selected

请参阅?没错。

但是,如果它是普通的 SELECT ... INTO,那么是 - 它会提高它:

SQL> create or replace procedure p_test as
  2    l_ename varchar2(20);
  3  begin
  4    select ename into l_ename
  5      from emp
  6      where empno = -1;
  7  end;
  8  /

Procedure created.

SQL> exec p_test
BEGIN p_test; END;

*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "HR.P_TEST", line 4
ORA-06512: at line 1


SQL>

[编辑#2]

是的,正如Alessandro所说,它应该由EXCEPTION部分处理。