Sql 在用户定义的表类型HANA的OUT参数中插入多行

Sql 在用户定义的表类型HANA的OUT参数中插入多行,sql,stored-procedures,sap,procedure,hana,Sql,Stored Procedures,Sap,Procedure,Hana,我被困在一个地方 有一个过程可以检查某些内容,并在成功确定该条件后将其插入到表类型中 但是我只能在表类型中插入一次。是否有一种方法可以一次又一次地插入到表类型中 PROCEDURE "hello"."helloWorld.db::sampleException" (OUT TRACE_RECORD "hello"."LogTrace" ) LANGUAGE SQLSCRIPT AS BEGIN DECLARE i int; select count(*) into i fro

我被困在一个地方

有一个过程可以检查某些内容,并在成功确定该条件后将其插入到表类型中

但是我只能在表类型中插入一次。是否有一种方法可以一次又一次地插入到表类型中

    PROCEDURE "hello"."helloWorld.db::sampleException" (OUT TRACE_RECORD "hello"."LogTrace" )
    LANGUAGE SQLSCRIPT AS
BEGIN

DECLARE i int;

select count(*) into i from "hello"."REGION";
IF :i > 1 then 
TRACE_RECORD = SELECT '1' AS "LogID", '1' AS "TraceID" FROM DUMMY;
 end if;
IF :i > 2 then 
TRACE_RECORD = SELECT '2' AS "LogID", '2' AS "TraceID" FROM DUMMY;
end if;

END;
我在执行过程时得到的只是最后一条记录“2,2”

如何插入记录1,1和2,2

注意:我不想使用临时表

这方面有什么帮助吗

谢谢

稍微编辑一下问题:

-我必须使用表类型(直到没有比它更好的最佳方式为止)


-我必须在表类型中插入20-30条以上的记录。

您必须将其作为一个过程来编写吗?表值函数似乎更合适:

    PROCEDURE "hello"."helloWorld.db::sampleException" (OUT TRACE_RECORD "hello"."LogTrace" )
    LANGUAGE SQLSCRIPT AS
BEGIN

DECLARE i int;

select count(*) into i from "hello"."REGION";
IF :i > 1 then 
TRACE_RECORD = SELECT '1' AS "LogID", '1' AS "TraceID" FROM DUMMY;
 end if;
IF :i > 2 then 
TRACE_RECORD = SELECT '2' AS "LogID", '2' AS "TraceID" FROM DUMMY;
end if;

END;
CREATE FUNCTION f_tables4 (in_id INTEGER)
RETURNS TABLE (
    "LogID" VARCHAR(400),
    "TraceID" VARCHAR(400)
)
LANGUAGE SQLSCRIPT
AS
BEGIN
    RETURN 
    SELECT t."LogID", t."TraceID"
    FROM (
        SELECT 1 AS i, '1' AS "LogID", '1' AS "TraceID" FROM DUMMY
        UNION ALL
        SELECT 2 AS i, '2' AS "LogID", '2' AS "TraceID" FROM DUMMY
    ) t
    JOIN (SELECT count(*) AS cnt FROM "hello"."REGION") c
    ON c.cnt > t.i
END

你必须把它写成一个过程吗?表值函数似乎更合适:

CREATE FUNCTION f_tables4 (in_id INTEGER)
RETURNS TABLE (
    "LogID" VARCHAR(400),
    "TraceID" VARCHAR(400)
)
LANGUAGE SQLSCRIPT
AS
BEGIN
    RETURN 
    SELECT t."LogID", t."TraceID"
    FROM (
        SELECT 1 AS i, '1' AS "LogID", '1' AS "TraceID" FROM DUMMY
        UNION ALL
        SELECT 2 AS i, '2' AS "LogID", '2' AS "TraceID" FROM DUMMY
    ) t
    JOIN (SELECT count(*) AS cnt FROM "hello"."REGION") c
    ON c.cnt > t.i
END

如果在整个过程中我有多个条件呢。以上只是一个例子。我认为这是没有用的@Lukas@abhi5800当前位置我不太了解HANA的特征。在Oracle中,您需要编写一个管道化的
函数。在SQL Server中,您将使用内存中的表并在其中插入记录。但是,只有使用SQL才能走得更远。我会保持原样,因为对于眼前的问题,我认为这是一个合理的答案。如果您想更新您的问题,更详细地说明为什么这对您不起作用,我可能会修改答案Thank@Lukar。!这个解决方案适用于小数据(我的问题是)。但我一直在寻找一个更为优化的解决方案,因为我必须在表类型中插入许多行。@abhi5800:它也适用于30条记录-我不太确定目前的问题是什么。风格SQL并不是一件坏事,您知道:-)当然也不一定比任何等效的过程解决方案更糟糕。如果你能重新表述你的问题,清楚地说明为什么这个解决方案不适合你(除了风格方面的考虑),那么我会重新考虑,但现在看来,这似乎是你最好的选择。谢谢卢卡斯!到目前为止,它已经创造了20多个记录。可能是用同样的方法。韩娜;)如果在整个过程中我有多个条件呢。以上只是一个例子。我认为这是没有用的@Lukas@abhi5800当前位置我不太了解HANA的特征。在Oracle中,您需要编写一个管道化的
函数。在SQL Server中,您将使用内存中的表并在其中插入记录。但是,只有使用SQL才能走得更远。我会保持原样,因为对于眼前的问题,我认为这是一个合理的答案。如果您想更新您的问题,更详细地说明为什么这对您不起作用,我可能会修改答案Thank@Lukar。!这个解决方案适用于小数据(我的问题是)。但我一直在寻找一个更为优化的解决方案,因为我必须在表类型中插入许多行。@abhi5800:它也适用于30条记录-我不太确定目前的问题是什么。风格SQL并不是一件坏事,您知道:-)当然也不一定比任何等效的过程解决方案更糟糕。如果你能重新表述你的问题,清楚地说明为什么这个解决方案不适合你(除了风格方面的考虑),那么我会重新考虑,但现在看来,这似乎是你最好的选择。谢谢卢卡斯!到目前为止,它已经创造了20多个记录。可能是用同样的方法。韩娜;)