SAP HANA:有没有办法将架构和 table 名称定义为过程的输入参数?
SAP HANA: Is there a way to define schema and table name as input parameters of a procedure?
我正在创建一个程序来删除 table 行重复项。
代码工作正常,我想将代码转换为过程。我找不到将 [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;
但对于 table 名称,您需要构建并 run dynamic SQL statement 使用
execute immediate :sql;
你可以这样做:
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:我不认为您可以动态传递 OriginalSchema 名称,因为要创建一个过程,您必须至少有一个模式,您实际上试图在第一个地方创建您的过程
我正在创建一个程序来删除 table 行重复项。
代码工作正常,我想将代码转换为过程。我找不到将 [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;
但对于 table 名称,您需要构建并 run dynamic SQL statement 使用
execute immediate :sql;
你可以这样做:
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:我不认为您可以动态传递 OriginalSchema 名称,因为要创建一个过程,您必须至少有一个模式,您实际上试图在第一个地方创建您的过程