Bagaimana cara menjalankan prosedur tersimpan di drupal?


9

Saya memiliki situs web yang banyak mengerjakan data keuangan. Ini melibatkan operasi pada volume data yang besar sebagian besar waktu. Oleh karena itu saya merasa berguna untuk melakukan operasi-operasi tersebut dalam prosedur tersimpan mysql. Saya telah menyimpan prosedur di basis data saya. Saya ingin tahu bagaimana cara menjalankan prosedur tersimpan di drupal? Apakah ada metode yang baik untuk menjalankan prosedur tersimpan di drupal? Bagaimana drupal menangani prosedur tersimpan secara umum? Atau kita hanya perlu menggunakan PHP untuk menjalankan prosedur tersimpan?


Sudahkah Anda mencari di web? Google mengembalikan beberapa hasil untuk "prosedur tersimpan drupal" yang tampaknya menarik. Apakah Anda mencoba kodenya? Bisakah Anda memberi tahu kami apa yang berhasil, dan apa yang tidak?
marcvangend

1
Ya, saya melakukan pencarian di google. Tampaknya perlu beberapa baris kode untuk menjalankan prosedur tersimpan tunggal dengan parameter. Apakah ada fungsi pembantu di API Drupal untuk menjalankan prosedur tersimpan?
Mahesh Bhat

Jawaban:


11

Dengan asumsi Anda menggunakan Drupal 7 Anda dapat menggunakan kode seperti berikut:

// Get the Drupal database connection and change the statement class to PDOStatement.
// Save the current class for cleanup later.
$conn = Database::getConnection();
$saved_class = $conn->getAttribute(PDO::ATTR_STATEMENT_CLASS);
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement'));

// Prepare the statement and bind params
$statement = $conn->prepare("Call GetNodeList(?,?)");

$op_status = $statement->bindParam(1, $node_type, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 25);
$op_status = $statement->bindParam(2, $publish_state, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);

// Execute the statement and reset the connection's statement class to the original.
$exec_result = $statement->execute();
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, $saved_class);

// Get your data
while ($row = $statement->fetchColumn(0)) {
  // ...
}

Metode itu sepenuhnya diambil dari artikel ini dan telah bekerja dengan baik untuk saya di masa lalu.


terima kasih telah memusnahkannya! halaman yang dirujuk dengan "artikel ini" tidak menyelesaikan.
cdmo

0

Tidak yakin apakah ini cara yang benar untuk ini, tetapi itu berhasil untuk saya. Saya memiliki sistem warisan yang berbagi server database Postgres yang sama dengan yang dilakukan Drupal.

Dalam pengatur pengiriman saya perlu mengirim data ke sistem warisan ini yang memiliki prosedur tersimpan (Postgres menyebutnya fungsi) untuk menangani data:

// Get legacy database connection set-up in settings.php
Database::getConnection('default', 'legacy')
  ->query('SELECT * FROM stored_procedure(:named_parameter_1, :named_parameter_2, ...);', [
    ':named_parameter_1' => $value_1,
    ':named_parameter_1' => $value_2,
    ...
  ]);

Ini berhasil membuat data masuk ke sistem lawas saya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.