মাইএসকিউএল ট্রিগার বাস্তবায়নে গিয়ারম্যান ক্লায়েন্ট ব্যবহার করবেন কিভাবে

আমি ডাটাবেসের জন্য গিয়ারম্যান udf সেট আপ করেছি এবং MySQL প্রশ্ন থেকে একটি গিয়ারম্যান কাজ পাঠানোর চেষ্টা করেছি। সাধারণত এটি ঠিক সূক্ষ্ম কাজ করছে। নিম্নরূপ MySQL প্রশ্ন থেকে প্রচলিত কল হিসাবে:

SELECT gman_do_background("eventName", "data");

এখন সমস্যাটি ঘটছে যখন আমি এই কলটি মাইএসকিউএল ট্রিগার বাস্তবায়ন থেকে দেওয়ার চেষ্টা করছি। নিম্নরূপ একটি ত্রুটি দেখাচ্ছে হচ্ছে:

MySQL said: #1415 - Not allowed to return a result set from a trigger

সুতরাং, মূলত আপনি দেখতে পারেন, হয়

  1. গিয়ারম্যান কল বা
  2. এর জন্য অন্য কোন উপায় রয়েছে
  3. যেভাবেই আমি গিয়ারম্যান সিলেক্ট কল দিয়ে সেখানে একটি জাল আপডেট কল করেছি।

আমি ট্রিগারটি লেখার চেষ্টা করছি যা নীচের হিসাবে অনেক সহজ:

BEGIN
    SELECT gman_do_background("eventName", "@data") FROM 
    (
         SELECT @data := CONCAT(a,',',b,',',c) FROM mytablename WHERE status = 1
    )
END

কিন্তু হিসাবে আপনি দেখতে পারেন, 'নির্বাচন' অপারেশন, এটি সংরক্ষণ এবং উপরে ত্রুটি নিক্ষেপ না।

যে কেউ দয়া করে আমাকে সাহায্য করতে পারেন কোন বিকল্প গিয়ারম্যান কল টাইপ ('নির্বাচন' ছাড়া অন্য) আছে কিনা বা কোনও মাইএসকিউএল টেবিল/কলামকে প্রভাবিত করে এমন আপডেট প্রশ্নটি লিখার কোন উপায় নেই? অগ্রিম ধন্যবাদ ।

0
হাই রবীন্দ্র, এটি গিয়ারম্যান দ্বারা সরবরাহ করা হয়েছে (যেমন আপনি লিঙ্কটিতে দেখতে পারেন)। ডকুমেন্টেশন এখানে রয়েছে: dl.dropboxusercontent.com/u/16060416/README.txt</একটি>। হ্যাঁ, যে একটি MySQL ফাংশন হিসাবে ঘোষণা করা হয়।
যোগ লেখক Rana, উৎস
হ্যাঁ, আমি পোস্টে উল্লেখ করেছি, গিয়ারম্যান লাইব্রেরিটি 'নির্বাচন ...' হিসাবে ব্যবহার করার উল্লেখ করেছে। এবং এটি পরিবর্তন করার উপায় দেখতে পাচ্ছি না। তাই, আমি দ্বিতীয় বিকল্পে বললাম, কোনও জাল আপডেট বিবৃতি তৈরি করার কোন উপায় আছে যা প্রকৃতপক্ষে কোনও বাস্তব আপডেট সৃষ্টি করবে না?
যোগ লেখক Rana, উৎস
হ্যাঁ, আমি পোস্টে উল্লেখ করেছি, গিয়ারম্যান লাইব্রেরিটি 'নির্বাচন ...' হিসাবে ব্যবহার করার উল্লেখ করেছে। এবং এটি পরিবর্তন করার উপায় দেখতে পাচ্ছি না। তাই, আমি দ্বিতীয় বিকল্পে বললাম, কোনও জাল আপডেট বিবৃতি তৈরি করার কোন উপায় আছে যা প্রকৃতপক্ষে কোনও বাস্তব আপডেট সৃষ্টি করবে না?
যোগ লেখক Rana, উৎস
আসলে তার খুব সহজ ট্রিগার। এটি শুধু একটি টেবিল থেকে কয়েকটি জিনিস নির্বাচন করুন এবং গিয়ারম্যান সার্ভারে পাঠান। আমি শুধু ট্রিগার নমুনা সঙ্গে পোস্ট আপডেট।
যোগ লেখক Rana, উৎস
আসলে তার খুব সহজ ট্রিগার। এটি শুধু একটি টেবিল থেকে কয়েকটি জিনিস নির্বাচন করুন এবং গিয়ারম্যান সার্ভারে পাঠান। আমি শুধু ট্রিগার নমুনা সঙ্গে পোস্ট আপডেট।
যোগ লেখক Rana, উৎস
আসলে তার খুব সহজ ট্রিগার। এটি শুধু একটি টেবিল থেকে কয়েকটি জিনিস নির্বাচন করুন এবং গিয়ারম্যান সার্ভারে পাঠান। আমি শুধু ট্রিগার নমুনা সঙ্গে পোস্ট আপডেট।
যোগ লেখক Rana, উৎস
আপনার প্রশ্নের একটি বিট অদ্ভুত মনে হয়। আপনি mytable থেকে একাধিক সারি নির্বাচন করেন?
যোগ লেখক peterm, উৎস
আপনার প্রশ্নের একটি বিট অদ্ভুত মনে হয়। আপনি mytable থেকে একাধিক সারি নির্বাচন করেন?
যোগ লেখক peterm, উৎস
আপনার প্রশ্নের একটি বিট অদ্ভুত মনে হয়। আপনি mytable থেকে একাধিক সারি নির্বাচন করেন?
যোগ লেখক peterm, উৎস
আপনি কীভাবে gman_do_background সংজ্ঞায়িত করেছেন তা পোস্ট করুন। এটি একটি ফাংশন বলে মনে হচ্ছে।
যোগ লেখক Ravinder Reddy, উৎস
নির্বাচন করুন ... একটি ট্রিগার শরীরের মধ্যে ব্যবহৃত হচ্ছে? যদি হ্যাঁ হয়, তবে তারা বাতিল করা বিবৃতিগুলি হতে পারে না, তবে কেবল শরীরের মধ্যে কার্সার ব্যবহার করতে পারে।
যোগ লেখক Ravinder Reddy, উৎস
নির্বাচন করুন ... একটি ট্রিগার শরীরের মধ্যে ব্যবহৃত হচ্ছে? যদি হ্যাঁ হয়, তবে তারা বাতিল করা বিবৃতিগুলি হতে পারে না, তবে কেবল শরীরের মধ্যে কার্সার ব্যবহার করতে পারে।
যোগ লেখক Ravinder Reddy, উৎস
আপনি যদি আপনার ট্রিগার শরীরের মত পোস্ট না, কেউ পরামর্শ দিতে পারেন।
যোগ লেখক Ravinder Reddy, উৎস
আপনি যদি আপনার ট্রিগার শরীরের মত পোস্ট না, কেউ পরামর্শ দিতে পারেন।
যোগ লেখক Ravinder Reddy, উৎস
আপনি যদি আপনার ট্রিগার শরীরের মত পোস্ট না, কেউ পরামর্শ দিতে পারেন।
যোগ লেখক Ravinder Reddy, উৎস

6 উত্তর

First of all doing any non-transactional operations in a trigger are wrong. In case of a rollback you won't be able to undo calls to your udf function. So I'd suggest reconsider using triggers for this type of calls.

অত্যন্ত সুপারিশ পড়া:


এখন আপনি যেভাবে SELECT গুলি খুঁজে বের করেছেন তা ট্রিগারগুলিতে নিষিদ্ধ করা হয়েছে কারণ ফলাফলটি ফেরত দেওয়ার জন্য কোনও ক্লায়েন্ট নেই।

কিন্তু আপনি বৈধভাবে এন্টারপ্রাইজ ব্যবহার করতে পারেন ... থেকে নির্বাচন করুন ... সিনট্যাক্স। আপনি যদি আপনার MySQL ইনস্ট্যান্সে সক্ষম হন তবে এটি ব্ল্যাকহোল ইঞ্জিন সহ একটি সহায়ক টেবিল তৈরি করতে পারেন। আপনি blackhole লিখতে কিছু যায়/dev/null যায়।

CREATE TABLE dev_null
(
  value VARCHAR(255) -- adjust data type as needed
) ENGINE=BLACKHOLE;

তারপর আপনার ট্রিগার

INSERT INTO dev_null
SELECT gman_do_background('eventName', @data) 
  FROM 
(
  ...
)

এখানে SQLFiddle ডেমো

2
যোগ

First of all doing any non-transactional operations in a trigger are wrong. In case of a rollback you won't be able to undo calls to your udf function. So I'd suggest reconsider using triggers for this type of calls.

অত্যন্ত সুপারিশ পড়া:


এখন আপনি যেভাবে SELECT গুলি খুঁজে বের করেছেন তা ট্রিগারগুলিতে নিষিদ্ধ করা হয়েছে কারণ ফলাফলটি ফেরত দেওয়ার জন্য কোনও ক্লায়েন্ট নেই।

কিন্তু আপনি বৈধভাবে এন্টারপ্রাইজ ব্যবহার করতে পারেন ... থেকে নির্বাচন করুন ... সিনট্যাক্স। আপনি যদি আপনার MySQL ইনস্ট্যান্সে সক্ষম হন তবে এটি ব্ল্যাকহোল ইঞ্জিন সহ একটি সহায়ক টেবিল তৈরি করতে পারেন। আপনি blackhole লিখতে কিছু যায়/dev/null যায়।

CREATE TABLE dev_null
(
  value VARCHAR(255) -- adjust data type as needed
) ENGINE=BLACKHOLE;

তারপর আপনার ট্রিগার

INSERT INTO dev_null
SELECT gman_do_background('eventName', @data) 
  FROM 
(
  ...
)

এখানে SQLFiddle ডেমো

2
যোগ

First of all doing any non-transactional operations in a trigger are wrong. In case of a rollback you won't be able to undo calls to your udf function. So I'd suggest reconsider using triggers for this type of calls.

অত্যন্ত সুপারিশ পড়া:


এখন আপনি যেভাবে SELECT গুলি খুঁজে বের করেছেন তা ট্রিগারগুলিতে নিষিদ্ধ করা হয়েছে কারণ ফলাফলটি ফেরত দেওয়ার জন্য কোনও ক্লায়েন্ট নেই।

কিন্তু আপনি বৈধভাবে এন্টারপ্রাইজ ব্যবহার করতে পারেন ... থেকে নির্বাচন করুন ... সিনট্যাক্স। আপনি যদি আপনার MySQL ইনস্ট্যান্সে সক্ষম হন তবে এটি ব্ল্যাকহোল ইঞ্জিন সহ একটি সহায়ক টেবিল তৈরি করতে পারেন। আপনি blackhole লিখতে কিছু যায়/dev/null যায়।

CREATE TABLE dev_null
(
  value VARCHAR(255) -- adjust data type as needed
) ENGINE=BLACKHOLE;

তারপর আপনার ট্রিগার

INSERT INTO dev_null
SELECT gman_do_background('eventName', @data) 
  FROM 
(
  ...
)

এখানে SQLFiddle ডেমো

2
যোগ
0
যোগ
0
যোগ
0
যোগ