【问题标题】:Why keeps returning me the ORA-01403 error?为什么总是向我返回 ORA-01403 错误?
【发布时间】:2019-08-02 12:04:46
【问题描述】:

大家好,当我在查询中运行我的代码时,一切似乎都很好,但是当我将它放在存储过程中时,它会返回“未找到数据错误”。

我使用了异常处理错误,但它返回了相同的错误。

create or replace procedure test(i_d number)
as
  l_text VARCHAR(900);
begin
  select 'TEST, '||to_char(D3,'yy.mm.dd')|| CHR(10)||'STRINGTEXT'||D2
    into l_text
  from table
  where id = i_d;
  EXCEPTION
  WHEN no_data_found THEN
  -- do something
  dbms_output.put_line('No records found for employee no ');

end;

我能做什么?

【问题讨论】:

  • 您确定您传递的 i_d 存在于表中吗?
  • 错误表明SELECT语句没有返回一行,所以条件where id = i_d显然计算为false
  • @helloandroiddevelopers when I run the stored procedure (as a stored procedure and not as execute test(5);) 是什么意思? execute test(5) 正在将代码作为存储过程运行!您运行代码的另一种方式是什么? (请编辑您的问题以添加该信息)
  • 你在哪里运行这个程序?在 PL/SQL 开发人员中?蟾蜍? SQL开发者?还有什么?
  • @helloandroiddevelopers 然后不要从左边运行它。当您单击左侧的程序名称时,您在哪里看到“运行”?您在哪个选项卡中 - 对象选项卡?

标签: sql oracle stored-procedures plsql oracle11gr2


【解决方案1】:

你能在你的异常部分中解释你正在做“--do something”的整个部分吗?我看到的唯一方法是在 Exception 部分内部可能会引发错误,理想情况下会通过错误。

您能否提供示例表结构和数据集来测试此场景。如果您能分享一个 livesql 链接,这样我们就可以帮助您,那就太好了。

您可以使用 LiveSQL - https://livesql.oracle.com/apex/f?p=590:1000

您也可以尝试如下更改 select 语句,并尝试运行 proc 以确保它不是由于 to_char 函数。

选择'测试,'|| D3 || CHR(10)||'STRINGTEXT'||D2 转换成 l_text

【讨论】:

  • 不是char函数的原因,我查了一下...我如何使用LiveSql为您提供我的查询?
  • 异常代码部分可以分享一下吗?
【解决方案2】:

尝试将 to_varchar(D3,'yy.mm.dd') 替换为 to_char(D3,'yy.mm.dd')

【讨论】:

  • 谢谢,我试过了,但这不是错误:/
  • 运行 select * from table,(table 是你的表名),然后从返回的数据中获取一个 id 并尝试运行:select 'TEST, '||to_char(D3,'yy. mm.dd')|| CHR(10)||'STRINGTEXT'||D2 from table where id = (这里放 id)
  • 是的,每次执行更改的代码时都会清除它
  • 你在什么 dbms 上运行它?
  • Oracle 数据库 11g 版本 11.2.0.1.0 - 64 位生产
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多