Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql EXECUTE('CALL SCHEMA.PROC')、CALL SCHEMA.PROC和EXCEUTE之间是否存在性能差异_Sql_Stored Procedures_Query Optimization_Dynamic Sql_Hana - Fatal编程技术网

Sql EXECUTE('CALL SCHEMA.PROC')、CALL SCHEMA.PROC和EXCEUTE之间是否存在性能差异

Sql EXECUTE('CALL SCHEMA.PROC')、CALL SCHEMA.PROC和EXCEUTE之间是否存在性能差异,sql,stored-procedures,query-optimization,dynamic-sql,hana,Sql,Stored Procedures,Query Optimization,Dynamic Sql,Hana,假设以下查询结构,三个选项之间是否存在性能差异: CREATE PROCEDURE SCHEMA.PROC BEGIN TEMP = SELECT * FROM A JOIN B JOIN C; INSERT INTO TABLE (TEMP); END; 备选案文1: STRING_OF_PROC = 'CALL SCHEMA.PROC()'; EXECUTE IMMEDIATE (STRING_OF_PROC); 备选案文2: CALL SCHEMA.PROC(); 备选案文3: E

假设以下查询结构,三个选项之间是否存在性能差异:

CREATE PROCEDURE SCHEMA.PROC
BEGIN
TEMP = SELECT * FROM A JOIN B JOIN C;
INSERT INTO TABLE (TEMP);
END;
备选案文1:

STRING_OF_PROC = 'CALL SCHEMA.PROC()';

EXECUTE IMMEDIATE (STRING_OF_PROC);
备选案文2:

CALL SCHEMA.PROC();
备选案文3:

EXECUTE IMMEDIATE ( TEMP = SELECT * FROM A JOIN B JOIN C; 
                    INSERT INTO TABLE (TEMP); );

如果不同的RDBMS之间存在差异,我将在SAP HANA空间中工作。

好的,这个问题相当模糊,因此我的回答将只描述不同的选项以及接下来的内容

选项0:这是一个执行SELECT并尝试将结果插入表的存储过程

选项1:准备一个字符串,其中包含调用过程的文本,然后将该字符串用于动态SQL执行立即执行

选项2:直接调用程序

选项3:使用一块SQLScript命令执行立即调用

Ad选项3根本不起作用并导致错误,因为EXECUTE IMMEDIATE需要一个命令字符串。此命令字符串必须是正确的SQL,但这里的情况并非如此。此外,它只能是单个命令,不能是多个命令的列表

选项1和选项2:从性能角度来看,这两个选项几乎相同。显然,动态SQL选项需要额外的解析,可能会导致共享SQL缓存中出现额外的条目,但这应该是过程调用的整个运行时中可以忽略的一部分

顺便说一句:选项0中的过程也不起作用-该过程在几个地方语法错误

一句话:对于没有参数或返回值的单个过程的调用,动态SQL调用和直接调用之间的性能差异可能可以忽略不计