gpt4 book ai didi

arrays - Oracle PL/SQL 中数组、循环的语法

转载 作者:行者123 更新时间:2023-12-02 18:40:25 24 4
gpt4 key购买 nike

我正在尝试解决 PL/SQL 中的问题,但我对该语言很陌生。我决定像用另一种语言解决它一样来解决它,因此我了解了一些有关 SQL 如何在此线程中声明和使用数组的知识:

Oracle PL/SQL - How to create a simple array variable?

我遵循了该示例,但我的代码无法运行。该错误消息没有帮助。特别是它引用第 21 行,而我的代码块从第 54 行开始。这里是,以防万一错误代码有意义:

ORA-06550: line 21, column 7:PLS-00103: Encountered the symbol "IN" when expecting one of the following::= . ( @ % ; 06550. 00000 - "line %s, column %s:\n%s"*Cause: Usually a PL/SQL compilation error.

这是我的代码块。我确信我犯了很多错误,因为我是通过这里的代码示例学习的。如果您能指出任何语法或其他错误,我将非常感激。谢谢

declare
vISBNa books.ISBN%type := '1059831198';
vISBNb books.ISBN%type := '0401140733';
vISBNc books.ISBN%type := '4981341710';
vISBNd books.ISBN%type := '8843172113';
vCATEGORYtemp books.CATEGORY%type;
vRETAILtemp books.RETAIL%type;
type arry is varray(4) of books.ISBN%type;
array arry := arry(vISBNa, vISBNb, vISBNc, vISBNd);
begin
for i in 1..array.count loop
select category
into vCATEGORYtemp
from books
where ISBN = i;
select retail
into vRETAILtemp
from books
where ISBN = i;
IF vCATEGORYtemp = 'COMPUTER' THEN
vRETAILtemp := vRETAILtemp * 0.7;
ELSIF vCATEGORYtemp = 'FITNESS' THEN
vRETAILtemp := vRETAILtemp * 0.6;
ELSIF vCATEGORYtemp = 'BUSINESS' THEN
vRETAILtemp := vRETAILtemp * 0.8;
ELSE
vRETAILtemp := vRETAILtemp * 0.9;
END IF;
dbms_output.put_line(vRETAILtemp);
end loop;
end;

最佳答案

该问题当然有一个简单的 SQL 解决方案,但由于这是 PL/SQL 实践(具体而言),因此这里有一些改进建议。请注意,代码几乎是正确的;特别是,不清楚什么(如果有的话)会引发您提到的确切错误。

在循环中,您可以在单个 select 语句中分配给两个局部变量,如下所示。另请注意 where 子句,您必须在其中将表中的 ISBNarray(i) 进行比较,而不是与 i 进行比较>。 (这是我发现的唯一错误!)

for i in 1 .. array.count loop
select category, retail
into vCATEGORYtemp, vRETAILtemp
from books
where ISBN = array(i);

最后,可以使用 case 表达式(不是 case)简化对 vRETAILtemp 的分配。 em>语句,这是一个与 if...then...elsif...else...end 构造非常相似的构造):

vRETAILtemp := vRETAILtemp * case vCATEGORYtemp when 'COMPUTER' then 0.7
when 'FITNESS' then 0.6
when 'BUSINESS' then 0.8
else 0.9 end;

关于arrays - Oracle PL/SQL 中数组、循环的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68076734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com