HSQL查询中while循环的语法

Posted

技术标签:

【中文标题】HSQL查询中while循环的语法【英文标题】:Syntax of while loop in HSQL query 【发布时间】: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

【问题讨论】:

【参考方案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 和所有其他连接变体。

【讨论】:

以上是关于HSQL查询中while循环的语法的主要内容,如果未能解决你的问题,请参考以下文章

C语言—循环语句超详解

简析Java中while循环与do/while循环的区别

python的循环语法

PHP 语言中的 while 循环语句

带有条件的 Bash 单行 while 循环的语法

PHP循环 跳转 替代语法 函数 返回总结