मैंने इसे समझने की कोशिश में एक दिन बिताया, इसलिए उम्मीद है कि इससे किसी को वहां मदद मिलेगी...
DELIMITER
क्लाइंट की एक विशेषता है, MySQL सर्वर नहीं। आरडीएस क्वेरी संपादक एक क्लाइंट है, लेकिन यह सीमांकक को बदलने का समर्थन नहीं करता है, इसलिए आपके द्वारा प्रदान की गई स्क्रिप्ट को चलाने का प्रयास काम नहीं करेगा क्योंकि पहली बार अर्धविराम दिखाई देता है, यह व्याख्या करेगा कि कमांड के अंत के रूप में और विफल हो जाएगा एक सिंटैक्स त्रुटि।
तो, आप एक संग्रहीत कार्यविधि की तरह कुछ कैसे बनाते हैं जिसमें कई कथन और अर्धविराम हैं? आपको इसे एक .sql
. के रूप में बनाना होगा फ़ाइल करें और इसे लैम्ब्डा फ़ंक्शन या सीएलआई से डेटा एपीआई का उपयोग करके भेजें।
सबसे पहले, अपनी स्क्रिप्ट को .sql
. में बनाएं फ़ाइल बिना किसी DELIMITER
. के आदेश या वैकल्पिक सीमांकक।
उदाहरण के लिए:function.sql
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END
फिर, इस तरह CLI का उपयोग करके स्क्रिप्ट चलाएँ:
cat function.sql | xargs -0 aws rds-data execute-statement \
--resource-arn arn:aws:rds:eu-west-1:xxx:cluster:cluster-name \
--secret-arn arn:aws:secretsmanager:eu-west-1:xxx:secret:secret-name-xxx \
--database "database_name" \
--sql
वैकल्पिक रूप से, आप एक लैम्ब्डा फ़ंक्शन बना सकते हैं जो फ़ाइल को पढ़ता है और rds_client.execute_statement()
का उपयोग करता है डेटा एपीआई के माध्यम से सर्वर को स्क्रिप्ट भेजने के लिए। लेकिन फिर से, DELIMITER
. का उपयोग न करें बयान। सर्वर BEGIN
देखता है और END
सीमांकक को बदलने की आवश्यकता के बिना लाइनों और तदनुसार कार्य करता है।