2010-01-10 185 views
2

我想查找由Perl ORM程序包(如Class::DBI)生成的確切SQL語句。我尋找一個簡單的插入生成的SQL和刪除,但是從稍微複雜的對象操作結果行修改(在表是在父表中的行的子行插入,例如)是否有可能獲得由Class :: DBI生成的SQL語句?

有什麼方法可以得到它嗎?

+0

爲什麼以及您希望如何獲取SQL?如果這是一次性的事情,那並不難。如果你想在程序中不斷地做它,並用它做一些花哨的事情,那就更難了。 – 2010-01-10 12:24:33

+0

以下是我的想法:我必須保持兩個數據庫同步。其中只有一個是活動數據庫。另一個只是一個活動的副本。由於兩者之間的連接並不總是保證穩定,所以我想記錄在一個數據庫上生成的所有SQL語句,將它們收集到一個文件中,通過網絡傳輸文件並在被動數據庫的單個事務中運行所有語句。不幸的是,由於我無法控制的原因,我無法使用複製工具或兩階段提交,理想情況下這是解決此問題的正確方法。 – 2010-01-10 12:47:18

回答

6

類:: DBI使用DBI引擎蓋下,這樣你就可以通過環境變量使所有的SQL語句的跟蹤:

use DBI; 
DBI->trace(2, 'dbi.log'); 

DBI_TRACE=3=dbi.log your-perl-script 

或Perl內,執行任何語句之前

請參閱http://metacpan.org/pod/DBI#TRACING

+0

謝謝 - 試過了。奇蹟般有效 :) – 2010-01-10 15:34:35

2

既然你說「比如」 ......

你可以,如果你使用的是DBIx::Class(其中有a Class::DBI compatibility layer)設置環境變量DBIC_TRACE1

+0

我認爲DBI :: Profile也會同樣有用,雖然我還沒有嘗試過,而且我對ORM的一般厭惡會阻止我嘗試:) – 2010-01-10 12:26:53

相關問題