Sql SAP HANA:有没有办法将模式和表名定义为过程的输入参数?

Sql SAP HANA:有没有办法将模式和表名定义为过程的输入参数?,sql,sap,procedure,hana,Sql,Sap,Procedure,Hana,我正在创建一个过程来删除重复的表行 代码运行良好,我想将代码转换为过程。我找不到将[Schema]和[Table]设置为输入参数的方法 Create procedure DUPL_DELETE (in inp1 nvarchar(100), in inp2 nvarchar(200)) as begin -- Select the distinct rows into a New temporary Table create local temporary table #Mytemp LIK

我正在创建一个过程来删除重复的表行

代码运行良好,我想将代码转换为过程。我找不到将[Schema][Table]设置为输入参数的方法

Create procedure DUPL_DELETE (in inp1 nvarchar(100), in inp2 nvarchar(200))
as 
begin

-- Select the distinct rows into a New temporary Table
create local temporary table #Mytemp
LIKE "SCHEMA"."TABLE";
-- LIKE :inp2.:inp1        Desired code to be(does not work)
SELECT DISTINCT * 
FROM "SCHEMA"."TABLE"
INTO "SCHEMA".#Mytemp;

-- Delete the rows from table
DELETE FROM "SCHEMA"."TABLE";

-- Insert disctinct data back in to the Table and drop the temporary table
INSERT INTO "SCHEMA"."TABLE" SELECT * FROM "SCHEMA".#Mytemp;
DROP TABLE "SCHEMA".#Mytemp;

end;

请帮助您可以尝试使用以下示例命令更改架构:

set schema OTHERSCHEMA;
但对于表名,您需要构建并使用


你可以这样做:

CREATE PROCEDURE OriginalSchema.procDynamicSchema( 
     IN schemaId NVARCHAR(250)
     )
     LANGUAGE SQLSCRIPT 
     SQL SECURITY INVOKER 
     READS SQL DATA AS

BEGIN
/***************************** 
  Write your procedure logic 
*****************************/
 EXECUTE IMMEDIATE 
 'SELECT  
    "Id",
    "UUID",
    "IdpId",
    "Email",
    "firstName",
    "lastname"
FROM ' || :schemaId || '."Users"' ;  
END;
那就叫它:

CALL "OriginalSchema"."procDynamicSchema"(SCHEMAID => 'XYZ')

p、 s:我认为您不能动态传递原始模式名称,因为要创建一个过程,您必须至少有一个模式,在这个模式中,您首先尝试创建您的过程

您需要使用动态SQL。谢谢,但我认为SAP HANA不推荐使用它,我已经根据你的建议做了一个测试,它是有效的,但是有一条消息像“不建议对此类查询使用动态SQL”。这条消息是一条警告消息——这意味着你的代码仍然在编译和执行。它的设计目的是让人们注意到,在SQL/SQLScript中,很可能不是一个很好的开发选择。试图在表、视图和模式方面“灵活”是为了避免SQL是静态类型(表是主要的数据类型)这一事实。有了这种“灵活性”,可能会出现各种各样的问题,包括执行性能和可维护性。在许多情况下,处理应用层或架构生成过程中的“灵活性”要容易/更好。@LarsBr。如果您尝试在以视图形式返回结果的过程中使用它(以结果视图VIEWNAMEXX作为BEGIN…)关于“set schema OTHERSCHEMA”读取SQL数据,则会从警告变为错误;SAP HANA也认为此动态SQL…在以结果视图形式返回结果的存储过程中遇到了相同的问题,该存储过程强制SQL为静态,没有任何动态…没有您的代码&此注释不会将错误消息添加到讨论中。换成另外一个问题怎么样?
CALL "OriginalSchema"."procDynamicSchema"(SCHEMAID => 'XYZ')