ड्रुपल में संग्रहीत प्रक्रियाओं को कैसे निष्पादित किया जाए?


9

मेरे पास एक वेबसाइट है जो वित्तीय आंकड़ों पर बहुत काम करती है। इसमें अधिकांश समय डेटा के बड़े संस्करणों पर परिचालन शामिल है। इसलिए मुझे mysql संग्रहित प्रक्रियाओं में उन कार्यों को करना उपयोगी लगता है। मैंने अपने डेटाबेस में प्रक्रियाएं संग्रहीत की हैं। मैं जानना चाहता हूं कि मैं ड्रुपल में संग्रहीत प्रक्रियाओं को कैसे निष्पादित कर सकता हूं? क्या ड्रुपल में संग्रहीत प्रक्रियाओं को निष्पादित करने के लिए कोई अच्छी विधि है? ड्रुपल सामान्य रूप से संग्रहीत प्रक्रियाओं को कैसे संभालता है? या हमें केवल संग्रहीत प्रक्रियाओं को निष्पादित करने के लिए PHP का उपयोग करना होगा?


क्या आपने वेब खोजा है? Google "ड्रुपल स्टोरेड प्रक्रियाओं" के लिए कुछ परिणाम देता है जो दिलचस्प लगते हैं। क्या आपने कोड की कोशिश की? क्या आप हमें बता सकते हैं कि क्या काम किया और क्या नहीं किया?
marcvangend

1
हां, मैंने Google में खोज की थी। लगता है कि मापदंडों के साथ किसी एकल संग्रहीत कार्यविधि को निष्पादित करने के लिए कोड की कुछ पंक्तियों की आवश्यकता है। क्या संग्रहीत प्रक्रिया को निष्पादित करने के लिए Drupal API में कोई सहायक कार्य है?
महेश भट

जवाबों:


11

मान लें कि आप Drupal 7 का उपयोग कर रहे हैं, तो आप निम्नलिखित की तरह कोड का उपयोग कर सकते हैं:

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

इस पद्धति को इस लेख से पूरी तरह से हटा दिया गया है और अतीत में मेरे लिए अच्छी तरह से काम किया है।


यह culling के लिए धन्यवाद! "यह लेख" के साथ संदर्भित पृष्ठ हल नहीं करता है।
cdmo

0

निश्चित नहीं है कि यह इस के लिए सही तरीका है, लेकिन यह मेरे लिए काम किया। मेरे पास एक विरासत प्रणाली है जो वही पोस्टग्रेज डेटाबेस सर्वर साझा करता है जो ड्रुपल करता है।

सबमिट हैंडलर में मुझे डेटा को भेजने के लिए इस विरासत प्रणाली में डेटा भेजने की आवश्यकता होती है, जिसमें एक संग्रहीत कार्यविधि होती है (पोस्टग्रेज उन्हें कॉल करता है)

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

इससे डेटा को मेरी विरासत प्रणाली में सफलतापूर्वक मिला

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.