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循环的语法的主要内容,如果未能解决你的问题,请参考以下文章