MySQL ไม่มีคำสั่ง PRINT แบบ SQL Server หรือ PostgreSQL (`RAISE NOTICE`) แต่สามารถ **จำลอง** ได้ด้วยคำสั่ง SELECT แบบไม่มี FROM
รูปแบบคำสั่ง
SELECT 'your_message' AS ``;
ใช้ Backtick ว่าง (` `) หรือ Alias ใดๆ ก็ได้ เพื่อไม่ให้แสดงชื่อคอลัมน์
ตัวอย่างการใช้งาน
1. พิมพ์ข้อความ (String)
mysql> SELECT 'HELLO MYSQL' AS ``;
+-------------+
| |
+-------------+
| HELLO MYSQL |
+-------------+
1 row in set (0.00 sec)
2. พิมพ์ตัวเลข (Integer)
mysql> SELECT 23 AS ``;
+----+
| |
+----+
| 23 |
+----+
1 row in set (0.00 sec)
3. พิมพ์ทศนิยม (Float/Double)
mysql> SELECT 23.45 AS ``;
+-------+
| |
+-------+
| 23.45 |
+-------+
1 row in set (0.00 sec)
4. พิมพ์ Expression / Function
mysql> SELECT CONCAT('Current time: ', NOW()) AS ``;
+-----------------------------+
| |
+-----------------------------+
| Current time: 2018-11-29... |
+-----------------------------+
1 row in set (0.00 sec)
ใช้ใน Stored Procedure / Trigger
MySQL Stored Procedure ไม่มี PRINT แต่สามารถ SELECT ได้:
DELIMITER //
CREATE PROCEDURE DebugExample(IN input_id INT)
BEGIN
SELECT CONCAT('Processing ID: ', input_id) AS ``;
IF input_id > 100 THEN
SELECT 'ID is large, skipping...' AS ``;
ELSE
SELECT 'ID is OK, proceeding...' AS ``;
END IF;
SELECT 'Done' AS ``;
END //
DELIMITER ;
CALL DebugExample(50);
วิธีอื่น: SELECT ... INTO @variable
หากไม่ต้องการแสดงผล แต่ต้องการเก็บค่า:
SELECT 'Message' INTO @msg; -- เก็บใน User Variable
SELECT @msg; -- แสดงภายหลัง
เปรียบเทียบกับ Database อื่น
| Database | คำสั่ง Print/Debug |
|---|---|
| MySQL | SELECT 'msg' AS ``; |
| SQL Server | PRINT 'msg'; |
| PostgreSQL | RAISE NOTICE 'msg'; |
| Oracle | DBMS_OUTPUT.PUT_LINE('msg'); |
| SQLite | SELECT 'msg'; (CLI) |
ข้อควรระวัง
- SELECT ใน Stored Procedure จะส่ง Result Set กลับ Client → อาจทำให้ Application Error หากไม่คาดคิด
- ใช้เฉพาะ Debug/Development ไม่ควรใช้ใน Production Procedure
- สำหรับ Logging จริง ใช้ Table Log หรือ Syslog