2016-11-18 87 views
0

是否有可能在每次打開數據庫的新連接時執行查詢。此查詢需要在打開數據庫連接後立即運行,因爲此查詢調用一個存儲過程,該存儲過程使用請求運行查詢的用戶的詳細信息在表上設置各種訪問控制。我試圖在各個地方調用這個存儲過程,它們都是成功的,但我希望得到一些反饋。每次打開數據庫連接時運行查詢Zend FM

我已經把這個查詢放在其他映射器擴展的抽象映射器類中。每次新實例化映射器時,都會調用存儲過程。

將此調用存儲過程的另一個地方是調用其他映射器方法之前。這樣做的缺點是會有很多重複的代碼(調用存儲過程的代碼)。

把這個電話放在最後的地方是Bootstrap.php。這個文件中的每個_init方法假設每次加載應用程序時只運行一次。我已決定將此調用存儲在Bootstrap.php之一的存儲過程中,以供我們的其中一個模塊使用。這是迄今爲止我能想到的最好的地方,因爲我只需編寫一次調用存儲過程的代碼,並且每次訪問應用程序時,都會運行initialize方法。這樣做的缺點是我不知道把東西放在Bootstrap.php的副作用。

所有這些地方的主要缺點之一是存儲過程被調用很多次。爲了使訪問控制起作用,每個數據庫會話只需要調用一次存儲過程。由於不必要的呼叫,這不會導致速度以外的任何問題。

有沒有更好的地方把這個調用存儲過程? Zend FM是否在某處實現了此功能?如果我把它放在Bootstrap文件中,有什麼需要考慮的。

感謝您閱讀本文以及提供的任何幫助。

  • DB2版本10.5
  • Linux平臺
  • Zend的FM版本2
+0

請註明DB2版本和平臺。 – mustaccio

回答

1

作爲替代方案,您可以在數據庫方面由database configuration parameter connect_proc設置爲存儲過程的名稱,配置此。請注意,該過程將針對所有遠程和本地連接進行調用,包括數據庫管理員所做的所有連接。

如果您需要從客戶端傳遞額外的信息給connect_proc程序,你可以使用MON_GET_CONNECTION() function使用client accounting string connection parameter,然後你可以在程序中閱讀:

SET acct_string = (
    SELECT client_acctng FROM TABLE (
    MON_GET_CONNECTION(MON_GET_APPLICATION_HANDLE(),-1) 
) 
) 
+0

該文檔說只有具有0個參數的程序可以用作連接程序。這是行不通的,因爲我們爲我們的程序提供了兩件事。 –