একটি স্টোরড প্রোসিজার তৈরি করব যা রেকর্ড আপডেট হওয়া সত্ত্বেও ভেরিয়েবল মান অপরিবর্তিত রাখবে। প্রথমে একটি টেবিল তৈরি করি:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value INT
);
রেকর্ড যোগ করি:
mysql> INSERT INTO DemoTable(Value) VALUES(100); mysql> SELECT * FROM DemoTable;
আউটপুট:
+----+-------+ | Id | Value | +----+-------+ | 1 | 100 | +----+-------+
পুরনো মান দেখানোর স্টোরড প্রোসিজার:
mysql> DELIMITER //
mysql> CREATE PROCEDURE updateValue100()
BEGIN
DECLARE myValue INT;
SELECT @myValue := (SELECT Value FROM DemoTable WHERE Id=1);
SELECT @myValue;
UPDATE DemoTable SET Value=200 WHERE Id=1;
SELECT @myValue := (SELECT Value FROM DemoTable WHERE Id=1);
SELECT @myValue;
END //
Query OK, 0 rows affected (0.21 sec)
mysql> DELIMITER ;
প্রোসিজার কল করুন:
mysql> CALL updateValue100();
আউটপুট:
+-------------------------------------------------------+ | @myValue :=(select Value from DemoTable where Id=1) | +-------------------------------------------------------+ | 100 | +-------------------------------------------------------+ +----------+ | @myValue | +----------+ | 100 | +----------+ +-------------------------------------------------------+ | @myValue :=(select Value from DemoTable where Id=1) | +-------------------------------------------------------+ | 200 | +-------------------------------------------------------+ +----------+ | @myValue | +----------+ | 200 | +----------+
ব্যাখ্যা: এখানে ইউজার-ডিফাইনড ভেরিয়েবল @myValue ব্যবহার করা হয়েছে। প্রথমে এটি ১০০ ধারণ করল। আপডেটের পরেও পুরনো মান (১০০) দেখালো, কারণ SELECT @myValue সেশন ভেরিয়েবলটি প্রিন্ট করল। কিন্তু আপডেটের পর আবার SELECT @myValue := ... লিখলে নতুন মান (২০০) এসাইন হয়ে গেল। আসল টেবিল আপডেট হলেও সেশন ভেরিয়েবল স্বয়ংক্রিয়ভাবে আপডেট হয় না।
টিপ: যদি আপনি চান যে আপডেটের পরেও ভেরিয়েবলে পুরনো মানই থাকে, তবে আপডেটের আগে ভেরিয়েবলে মান রাখুন এবং আপডেটের পর পুনরায় এসাইন করবেন না।