从 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/flagsset 方法有什么作用等等? 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 数据插入到表数据类型

将图像从客户端 pc 又名 Oracle 中的 Java 函数复制到 BLOB

SQL方言翻译桥?

将数据集从 Oracle PL/SQL 传递到 Java 的适当方法