কম্পিউটার টিউটোরিয়াল

MySQL স্টোরড প্রোসিজার ভেরিয়েবল মান আপডেটের সময় অপরিবর্তিত রাখা

একটি স্টোরড প্রোসিজার তৈরি করব যা রেকর্ড আপডেট হওয়া সত্ত্বেও ভেরিয়েবল মান অপরিবর্তিত রাখবে। প্রথমে একটি টেবিল তৈরি করি:

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 := ... লিখলে নতুন মান (২০০) এসাইন হয়ে গেল। আসল টেবিল আপডেট হলেও সেশন ভেরিয়েবল স্বয়ংক্রিয়ভাবে আপডেট হয় না।

টিপ: যদি আপনি চান যে আপডেটের পরেও ভেরিয়েবলে পুরনো মানই থাকে, তবে আপডেটের আগে ভেরিয়েবলে মান রাখুন এবং আপডেটের পর পুনরায় এসাইন করবেন না।

  1. MySQL-এ প্রোসিডিউরের ভেতরে ভেরিয়েবল ঘোষণা করা

  2. MySQL-এ DATE_ADD ব্যবহার করে টেবিলের তারিখ আপডেট করা (বছর যোগ/বিয়োগ)

  3. MySQL-এ স্টোরড প্রসিডিউরের ভেরিয়েবলে কলামের মান সংরক্ষণ করা

  4. MySQL-এ DECIMAL(19,2) কলামে ইনসার্ট সময় TRUNCATE ব্যবহার করে মান সংরক্ষণ করা