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-“未找到数据”
如果你说你是新来的,那么你已经做得很好了。
让我们深入研究这个问题,
如果您正在学习,请将下一个关于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或触发器”,我会确保将其标记为正