Come eseguire le procedure memorizzate in drupal?


9

Ho un sito Web che lavora molto sui dati finanziari. Implica operazioni su grandi volumi di dati per la maggior parte del tempo. Quindi trovo utile fare quelle operazioni nelle mysql stored procedure. Ho memorizzato le procedure nel mio database. Voglio sapere come posso eseguire le stored procedure in drupal? Esiste un buon metodo per eseguire stored procedure in drupal? In che modo drupal gestisce le procedure memorizzate in generale? O dobbiamo semplicemente usare PHP per eseguire le stored procedure?


Hai cercato nel web? Google restituisce alcuni risultati per "stored procedure drupal" che sembrano interessanti. Hai provato il codice? Puoi dirci cosa ha funzionato e cosa no?
marcvangend,

1
Sì, ho cercato su Google. Sembra che siano necessarie poche righe di codice per eseguire una singola procedura memorizzata con parametri. Esiste una funzione di supporto nell'API Drupal per eseguire la procedura memorizzata?
Mahesh Bhat,

Risposte:


11

Supponendo che tu stia utilizzando Drupal 7, puoi utilizzare il codice come segue:

// 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)) {
  // ...
}

Questo metodo è stato completamente eliminato da questo articolo e ha funzionato bene per me in passato.


grazie per averlo eliminato! la pagina a cui fa riferimento "questo articolo" non si risolve.
cdmo,

0

Non sono sicuro che questo sia il modo corretto per farlo, ma ha funzionato per me. Ho un sistema legacy che condivide lo stesso server di database Postgres di Drupal.

In un gestore di invio avevo bisogno di inviare dati a questo sistema legacy che aveva una procedura memorizzata (Postgres li chiama funzioni) per gestire i dati:

// 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,
    ...
  ]);

Questo ha portato i dati con successo nel mio sistema legacy

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.