Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
为什么Oracle与HANA的连接使用绑定变量工作得更快_Oracle_Variables_Bind_Gateway_Hana - Fatal编程技术网

为什么Oracle与HANA的连接使用绑定变量工作得更快

为什么Oracle与HANA的连接使用绑定变量工作得更快,oracle,variables,bind,gateway,hana,Oracle,Variables,Bind,Gateway,Hana,从Oracle到SAP HANA(通过Oracle网关)的连接出现问题。在executeimmediate中使用绑定变量时,SQLs的工作速度比在执行标准SQLs时快得多 F.e.: 运行时间:96.808秒 declare v_test number; begin execute immediate 'select count (1) from SYNONYM_TO_HANA_TABLE where field= :a' into v_test using '1234'; dbms

从Oracle到SAP HANA(通过Oracle网关)的连接出现问题。在executeimmediate中使用绑定变量时,SQLs的工作速度比在执行标准SQLs时快得多

F.e.:

运行时间:96.808秒

    declare
v_test number;
begin
execute immediate 'select count (1) from SYNONYM_TO_HANA_TABLE where field= :a'   into v_test using '1234';
dbms_output.put_line('return: ' || v_test);
end;
/
运行时间:0.179秒

基本上,两个SQL都返回相同的结果,但也许有人能够解释为什么执行时间之间存在如此大的差异。谢谢


Piotr

找出这些查询的处理方法。 第一步可以是比较执行计划

select /* my_query1 */  count(1) from SYNONYM_TO_HANA_TABLE ;

declare
begin
  execute immediate 'select  /* my_query2 */ count(1) from SYNONYM_TO_HANA_TABLE ';
end;
/

select sql_id,sql_text from v$sql where sql_text like '%my_quere%' ; 


select * from table(dbms_xplan.display_cursor('sql_id',0,'ALL')); 

这些问题的顺序是什么?首先是普通sql,然后是ExecuteImmediate。我尝试了这两种方法-使用ExecuteImmediate重新连接并执行,而不使用ExecuteImmediate;使用e.i.重新连接并执行w/o e.i.。始终执行即时操作比不使用绑定变量的SQL快得多。在您发布的代码中,执行即时操作示例从不将结果分配给变量。是否只是跳过了执行?如果不是这样的话,那么跟踪这些调用,看看会向SAP HANA发送什么,以及不同的步骤(准备、执行、获取)需要多长时间呢?关于分配,您是对的,这在post中是错误的。我已经用executeimmediate编辑了post并更正了sql。是否有可能在没有DBA的情况下对此进行跟踪?我没有系统权限。我没有访问该域的权限:(不带bind变量的corpo安全策略查询正在将数据获取到oracle站点,而带bind变量的corpo安全策略查询在HANA站点执行。这不是执行计划所说的。即使在某个情况下过滤条件不会传递给HANA,它也不会解释时间差,因为结果集仍然是一条记录。Lars你能告诉我吗关于基于这些查询计划的长执行时间?抱歉,第一次没有看到远程SQL部分。看起来Oracle没有按下COUNT(*)聚合并实际获取记录…显然它也没有按下文字过滤器…不知道是否/在何处可以修改此行为。
select /* my_query1 */  count(1) from SYNONYM_TO_HANA_TABLE ;

declare
begin
  execute immediate 'select  /* my_query2 */ count(1) from SYNONYM_TO_HANA_TABLE ';
end;
/

select sql_id,sql_text from v$sql where sql_text like '%my_quere%' ; 


select * from table(dbms_xplan.display_cursor('sql_id',0,'ALL'));