当前位置: 首页 > 知识库问答 >
问题:

在PL/SQL中没有发现数据错误

佟阳焱
2023-03-14
create or replace PROCEDURE Invoicedetails (Fromdate IN DATE , Todate IN DATE , InvoiceNum NUMBER)
IS 
INV_info invoicetable%ROWTYPE;
BEGIN
SELECT * 
INTO INV_info
FROM invoicetable
WHERE InvoiceNum = INV_info.InvoiceNum AND INV_info,InvoiceDate betwen Fromdate And Todate;
dbms_output.put_line('ID:'|| INV_info.InvoiceNum);
dbms_output.put_line('Amount:'|| INV_info.Invoiceamount);
dbms_output.put_line('Date:'|| INV_info.InvoiceDate);
END Invoicedetails;

当我像这样调用过程时

BEGIN
Invoicedetails('01-JAN-2020','05-JAN-2020',200651)
END;

错误报告ORA-01403:找不到数据ORA-06512:at“apps.invoicedetails”,第5行ORA-06512:at第2行014 03。00000-“未找到数据”

共有1个答案

萧无尘
2023-03-14

如果你说你是新来的,那么你已经做得很好了。

让我们深入研究这个问题,

如果您正在学习,请将下一个关于PLSQL中的Exception以及如何处理的主题放入Todo列表。

SELECT * 
  INTO INV_info
  FROM invoicetable
 WHERE InvoiceNum = INV_info.InvoiceNum 
   AND INV_info,InvoiceDate betwen Fromdate And Todate;

类似地,条件和INV_info、InvoiceDate betwen Fromdate和todate应该更改为和invoicetable.InvoiceDate betwen Fromdate和todate

说了所有这些之后,还需要考虑命名约定变量的interms以及表的别名的用法。(可以看到我对下面的过程做了什么更改)

累积所有点数过程可以进一步修改为,

create or replace procedure invoicedetails 
 ( 
   p_fromdate in date 
 , p_todate in date 
 , p_invoicenum number)
is 
  inv_info invoicetable%rowtype;
begin
  select * 
    into inv_info
    from invoicetable i
   where i.invoicenum = p_invoicenum 
     and i.invoiceDate between p_fromdate and p_todate;
  dbms_output.put_line('ID:'|| inv_info.invoicenum);
  dbms_output.put_line('Amount:'|| inv_info.invoiceamount);
  dbms_output.put_line('Date:'|| inv_info.invoicedate);
end invoicedetails;
/
 类似资料:
  • 主要内容:PL/SQL标量数据类型和子类型,PL/SQL数值数据类型和子类型,PL/SQL字符数据类型和子类型,PL/SQL布尔数据类型,PL/SQL日期时间和间隔类型,PL/SQL大对象(LOB)数据类型,PL/SQL用户定义的子类型,PL/SQL中的NULL在本章中,我们将讨论和学习PL/SQL中的数据类型。 PL/SQL变量,常量和参数必须具有有效的数据类型,它指定存储格式,约束和有效的值范围。本节将重点介绍和数据类型。其他两个数据类型(复合类型和引用类型)将在后面的章节中介绍。 标量(S

  • 我在执行触发器时遇到以下错误: 请说明问题的原因。 编辑 数据类型:

  • 问题内容: 我有一些代码需要调试帮助,但我认为,如果我能运行其中之一,我将可以得到其余的代码(哦,我希望如此)。 我正在尝试通过sqlplus在我学校的服务器上运行的表上执行此操作,如果有帮助的话。 问题答案: 遇到错误时,指定什么错误总是有帮助的。触发器中的调用中存在语法错误。该过程需要两个参数,一个数字和一个字符串。您传入的是一个长字符串的单个参数。 假设您的表格中有一列,则该值应有效。

  • 主要内容:创建触发器,示例在本章中,我们将讨论和学习PL/SQL中的触发器。 触发器是存储的程序,在发生某些事件时会自动执行或触发。事实上,触发器是为了响应以下任何事件而被执行的 - 数据库操作(DML)语句(,或) 数据库定义(DDL)语句(,或)。 数据库操作(,,,或)。 可以在事件关联的表,视图,模式或数据库上定义触发器。 使用触发器的好处 触发器可以用于以下目的 - 自动生成一些派生列值 强化参照完整性 事件记录

  • 我想创建ddl触发器(在创建),这将创建一个dml触发器,但我有错误: ORA-06512:8 00604. 00000-"错误发生在递归SQL级别%s"*原因:错误发生在处理递归SQL语句(适用于内部字典表的语句)。*操作:如果可以纠正堆栈上下一个错误中描述的情况,请这样做;否则请联系Oracle支持。

  • 这是我的玩具装置。我有三张桌子。一张桌子是客人列表(姓、名,随便什么)、食物列表(豆类、糊类、米饭、蔬菜)和订单列表(客人id、食物id)。我感兴趣的是订单清单。我想对它进行以下条件的约束。 客人必须有3份订单。客人可以有一个空订单。每个客人的订单不能相同,除非该订单为空。 因此订单表将如下所示(使用字符串而不是fk ID): 如果唯一有效的答案是“使用PL/SQL或触发器”,我会确保将其标记为正