Sql SAP HANA:有没有办法将模式和表名定义为过程的输入参数?
我正在创建一个过程来删除重复的表行 代码运行良好,我想将代码转换为过程。我找不到将[Schema]和[Table]设置为输入参数的方法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
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')