【问题标题】:Syntax of while loop in HSQL queryHSQL查询中while循环的语法
【发布时间】:2019-10-17 15:09:17
【问题描述】:

首先,我是编程新手,如果我犯了语法错误或问了一些愚蠢的问题,我很抱歉。 我想在 HSQL 中循环一个查询(查询本身正在工作),我用一个 WHILE 语句和一个 IF 语句尝试了它,但它们都没有工作。 这个想法是我想在我的查询生成的表中使用一个值,并在 (select, from, where) 的以下 WHERE 语句中使用该值,直到该值为 NULL。 我做错了什么?已经在变量声明中了? 在代码中,我从 SELECT/FROM 语句中省略了一些代码,因为该语句在未“循环”时有效。

CREATE PROCEDURE (a)
BEGIN ATOMIC
DECLARE input INTEGER;
SET input = 49;
WHILE input = NOT NULL
DO
SELECT "SampleID"."Sample ID", "SampleID"."Originating from SampleID",   "SampleID"."Info" "ProjectID"."ProjectName" 
FROM { oj "SampleID" LEFT OUTER JOIN "ProjectID" ON "SampleID"."ProjectID" = "ProjectID"."ProjectID"  
WHERE ( "SampleID"."Sample ID" = input);
SET input= ("SampleID"."Originating from SampleID")
END WHILE;
END

【问题讨论】:

    标签: loops while-loop hsqldb


    【解决方案1】:

    感谢您的回答。 迭代 FOR 语句正是我所需要的。

    如果不能在过程中放置​​ OUTER JOIN,我是否理解正确?

    关于我的整个查询,它仍然没有运行。 意外令牌:语句 [CREATE PROCEDURE] 中的 PROCEDURE。

    创建一个FUNCTION更好吗?声明变量怎么办,最好声明一个游标?

    您好,再次感谢您的帮助,

    林赛

    【讨论】:

    • 你应该把附加信息放在你原来的问题中。
    【解决方案2】:

    首先,您可以在查询中添加 NOT NULL 条件:

    SELECT "SampleID"."Sample ID", "SampleID"."Originating from SampleID",  "SampleID"."Info" "ProjectID"."ProjectName" 
    FROM "SampleID" LEFT OUTER JOIN "ProjectID" ON "SampleID"."ProjectID" = "ProjectID"."ProjectID"  
    WHERE "SampleID"."Sample ID" = input AND "SampleID"."Originating IS NOT NULL;
    

    请注意,您不能在过程中使用{oj 语法。

    现在,如果您只想从查询中获取“源自 SampleID”,为什么还要选择其他列?您还可以简化联接。

    SELECT "SampleID"."Originating from SampleID"
    FROM "SampleID" LEFT OUTER JOIN "ProjectID" USING ("ProjectID")
    WHERE "SampleID"."Sample ID" = input AND "SampleID"."Originating IS NOT NULL;
    

    FOR ... DO ... END 循环用于检查和使用 SELECT 中的行。您可以在循环内添加额外的语句:

    for_label: FOR 
    SELECT "SampleID"."Sample ID", "SampleID"."Originating from SampleID",  "SampleID"."Info" "ProjectID"."ProjectName" 
    FROM "SampleID" LEFT OUTER JOIN "ProjectID" ON "SampleID"."ProjectID" = "ProjectID"."ProjectID"    
    WHERE "SampleID"."Sample ID" = input AND "SampleID"."Originating IS NOT NULL 
    DO
    SET input= ("SampleID"."Originating from SampleID")
    END FOR for_label;
    

    查看指南:http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_for_statement

    创建过程语句必须有名称。例如:

    CREATE PROCEDURE a()
    BEGIN ATOMIC
    

    您可以在存储过程中使用 OUTER JOIN 和所有其他连接变体。

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多