从 Java 到 Oracle SQL 的翻译:将每个元素作为 SELECT 语句的结果使用到循环中[关闭]
Posted
技术标签:
【中文标题】从 Java 到 Oracle SQL 的翻译:将每个元素作为 SELECT 语句的结果使用到循环中[关闭]【英文标题】:Translation from Java to Oracle SQL: use every element into a loop as result of a SELECT statement [closed] 【发布时间】:2021-01-18 15:51:30 【问题描述】:这是我第一次使用 Oracle 功能。 我正在尝试将这段 Java 代码翻译成 Oracle SQL。
It's present a SELECT statement before the loop
for (int i = 0; i < checkList.size(); i++)
String check= checkList.get(i);
我的翻译:
CURSOR C1 IS
... select statement ...
BEGIN
FOR vItems IN C1.COUNT LOOP
-- I don't know how to continue, taking the first value of the select
END LOOP;
END;
【问题讨论】:
没有足够的信息来尝试翻译。在 Java 代码中,使用了变量first
,但没有提及它可能包含什么值。同样,有一个flag.set
和一个flags.set
。什么是/是flag
/flags
,set
方法有什么作用等等? String priority
被赋予了一个值,但似乎没有以其他方式使用。并且没有显示据称驱动此逻辑的 SELECT 语句,因此无法理解发生了什么。
@BobJarvis-ReinstateMonica 但是如果我想对查询的结果一一评估,怎么办?
@BobJarvis-ReinstateMonica 第一部分很重要。如何将 select 语句中的值评估到循环中
【参考方案1】:
假设您想为表 EMP
和架构 SCOTT
中的每个 EMPNO
做一些事情。 (几乎每个 Oracle 数据库安装都有一个标准架构 SCOTT
;其中一个表是 EMP
,主键为 EMPNO
。这通常用于测试和说明。)
要在循环中对EMPNO
的每个值执行某些操作,在 PL/SQL 中,您可以执行以下操作:
declare
cursor c1 is select empno from scott.emp;
begin
for rec in c1 loop
dbms_output.put_line(rec.empno); -- or more generally, "DO SOMETHING"
end loop;
end;
/
请注意,这里没有“数组索引”——您直接引用“记录”。 (顺便说一句,如果您希望以特定顺序处理行,您可以将其包含在 order by
子句中,直接在 select
语句中!)
虽然你可以写得更紧凑(我认为在 Java 中没有等价物):
begin
for rec in (select empno from scott.emp) loop
dbms_output.put_line(rec.empno);
end loop;
end;
/
【讨论】:
能保证rec.empno变成一个变量吗?我可以直接使用 rec.empno 作为 switch 语句吗?谢谢 @OutOfMemoryError - 你尝试的时候发生了什么?以上是关于从 Java 到 Oracle SQL 的翻译:将每个元素作为 SELECT 语句的结果使用到循环中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft T-SQL 到 Oracle SQL 的翻译
java.sql.SQLException同时将变量从java传递到oracle过程
将表数据类型从 SQL Server 转换为 Oracle 并将动态 SQL 数据插入到表数据类型