请问我的一个查询语句是要丛dblink查询几个表,driving_site中包含多个表的语法是怎么样的?比如:select  /*+driving_site(table1,table2,table3)*/
       table1.column,table2.column,table3.column...
        from table1@dblink table1
            ,table2@dblink table2
            ,table3@dblink table3
        where ...

解决方案 »

  1.   

    请问是不是把/*+driving_site(table1,table2,table3)*/
    替换成/*+ remote_mapped(dblink) */ 
    好些呢?
      

  2.   

    driving_site的相关说明:
    对于那些存在远程的SQL,ORACLE可以有两种选择:
    1,在远端执行SQL
    2,在本地执行SQL
    至于如果选择SQL的执行地点呢,这完全是由SQL决定的,看在哪端执行的COST低就在哪端执行。但是ORACLE并不总是那么聪明,所以有的时候需要我们自己觉得SQL在哪端执行。我们可以driving_site这个HINT来决定SQL的执行。
    看下面的SQL:SELECT /*+driving_site(a)*/
    a.column_1,
    b.column_2
    FROM table_1@dl_remote a,
    table_2 b
    WHERE a.column_1 = b.column;由于table_1是远端的表,在/*+driving_site(a)*/提示的影响下,oracle会把表table_2发送到dl_remote所指的远端,
    然后在远端进行连接,最后把执行的结果在返回给本地。SELECT /*+driving_site(b)*/
    a.column_1,
    b.column_2
    FROM table_1@dl_remote a,
    table_2 b
    WHERE a.column_1 = b.column;由于table_2是本地的表,在/*+driving_site(b)*/提示的影响下,oracle会把表table_1的数据取到本地,
    然后在本地进行连接,最后把执行的结果在返回。如果表table_1和table_2的记录数相差很多的话,选择合适的执行端就显得极其重要了。
      

  3.   

    教你快速掌握Oracle中“HINT”的30个用法http://www.examda.com/oracle/jishu/20070927/101719655.html