Shu*_*hmi 1 sap dynamic-sql hana
我想在 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;
Run Code Online (Sandbox Code Playgroud)
我面临以下障碍:
如何根据 HANA 中的动态条件(列名/传递给过程)对结果集进行排序。
TIA
您必须使用EXECUTE IMMEDIATE来执行动态 SQL 语句:
EXECUTE IMMEDIATE 'SELECT NAME FROM DEMO_PRODS ' || :ORDERSTRING || ' DESC';
Run Code Online (Sandbox Code Playgroud)
但是,对于动态 SQL,您不能使用表类型变量进行选择。所以你需要为SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);
. 使用全局临时表是一种:
INSERT INTO TEMPORARY_TABLE (SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);
EXECUTE IMMEDIATE 'SELECT NAME FROM TEMPORARY_TABLE ' || :ORDERSTRING || ' DESC';
Run Code Online (Sandbox Code Playgroud)