SAP HANA 存储过程中的动态 SQL

Dynamic SQL in SAP HANA Stored Procedures

我想在 HANA 中创建一个存储过程,它执行以下操作:

这是我要创建的存储过程

CREATE PROCEDURE DEMO_PROD_EXAMPLE_DYNAMIC(IN TEMPLIST PRODLISTTYPE,IN ORDERSTRING VARCHAR(200))
AS
BEGIN
OUTVAR = SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);

SELECT * FROM :OUTVAR ORDER BY :ORDERSTRING DESC;

END;

我面临以下障碍:

如何在 HANA 中根据动态条件(传递给过程的 name/s 列)对结果集进行排序。

TIA

您必须使用 EXECUTE IMMEDIATE 来执行动态 SQL 语句:

EXECUTE IMMEDIATE 'SELECT NAME FROM DEMO_PRODS ' || :ORDERSTRING || ' DESC';

但是,对于动态 SQL,您不能将 table 类型的变量用于 select。所以你需要为 SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST); 找到另一个解决方案。使用 global temporary table 是一个:

INSERT INTO TEMPORARY_TABLE (SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);
EXECUTE IMMEDIATE 'SELECT NAME FROM TEMPORARY_TABLE ' || :ORDERSTRING || ' DESC';