วันอังคารที่ 17 สิงหาคม พ.ศ. 2553

Transaction with Stored Procedure in MySQL Server

Transaction with Stored Procedure in MySQL Server
Stored Procedure in MySQL Server is not atomic by default. To ensure atomicity, you need to write all your SQL Statements within START TRANSACTION .. COMMIIT Block. Moreover, you need to declare EXIT HANDLER for SQLEXCEPTION and SQLWARNINGS to ROLLBACK all of the SQL Statements in START TRANSACTION .. COMMIIT Block.
==========================================

DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;

==========================================

You need to keep in mind those two important issues while using Transaction and Exit Handler in MySQL Server.

# Never declare any Variable within START TRANSACTION .. COMMIIT Block.

# Exit Handler Declaration should be your last Declaration just ahead of START TRANSACTION .. COMMIIT Block.

Let's do some coding. In the following code snippet, I write "sp_cheque_leaves_posting" Procedure that accepts two Parameters. Second one is OUT Parameter that returns 1 on succeess of this Stored Procedure Routine.

============================================================================

CREATE PROCEDURE sp_cheque_leaves_posting(IN param_requisition_id INT, OUT param_sp_success TINYINT)

BEGIN

DECLARE details_id_loop INT DEFAULT 0;
DECLARE starting_serial_no INT;
DECLARE record_not_found INT DEFAULT 0;
DECLARE cursor_details_id CURSOR FOR SELECT details_id FROM khan_trial.table_requisition_details WHERE requisition_master_id = param_requisition_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET record_not_found = 1;

DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;

START TRANSACTION;

SET param_sp_success = 0;

SELECT MAX(ending_serial_no) INTO starting_serial_no FROM table_cheque_leaves_posting;

IF starting_serial_no IS NULL THEN
SET starting_serial_no = 1;
ELSE
SET starting_serial_no = starting_serial_no + 1;
END IF;

OPEN cursor_details_id;

all_details_id:LOOP

FETCH cursor_details_id INTO details_id_loop;

IF record_not_found THEN
LEAVE all_details_id;
END IF;

INSERT INTO table_cheque_leaves_posting
VALUES(details_id_loop,starting_serial_no,starting_serial_no+9,12,12,'A Rahim Khan');

SET starting_serial_no = starting_serial_no + 10;

END LOOP all_details_id;

CLOSE cursor_details_id;

UPDATE table_requisition_master SET cheque_leaves_posting = 1
WHERE requisition_id = param_requisition_id;

SET param_sp_success = 1;

COMMIT;

END

=======================================================
Database has three tables i.e. “table_cheque_leaves_posting”, “table_requisition_details”, “table_requisition_master”. “table_cheque_leaves_posting” does not allow duplicate “details_id”. Call the "sp_cheque_leaves_posting" routine in the following way.

===============================

CALL sp_cheque_leaves_posting(1,@a);
SELECT @a;

Output:
@a
--------
0
================================

That is the Stored Procedure has not completed successfully. Inserting duplicate value for “details_id” Field in “table_cheque_leaves_posting” has resulted in SQLEXCEPTION and SQL Statements within the START TRANSACTION .. COMMIIT Block has not commited as well.

ถ้ายัง ลองนี่ดูครับว่าใช้ได้มั้ยคัรบ

ประกาศการสร้าง stored procedure ด้วยนะครับ
BEGIN
declare exit handler for not found rollback;
declare exit handler for sqlexception rollback;
declare exit handler for sqlwarning rollback;

START TRANSACTION;
Bla .. Bla .. Bla .. อะไรก็ว่ากันไปคัรบ;
COMMIT;
END

วันจันทร์ที่ 16 สิงหาคม พ.ศ. 2553

แก้ WGA Window XP แบบสมบูรณ์

ทำแบบนี้ได้ 100 % โดยไม่ต้องใช้โปรแกรมใดๆครับ

แก้ WGA Window XP แบบสมบูรณ์

แล้วทำวิธีนี้มันต่างกันยังไงหรอ ผมลองทำแล้วมันได้อะ ไม่ต้องโหลดโปรแกรมอะไรเลย

จากที่หลาย ๆ คนได้โดนเจ้าตัว WGA ของทาง Microsoft เข้าไปทำให้หลายท่านเกิดความรำคาญ แต่วันนี้เรามีวิธีที่เด็ดขาดโดยมันจะไม่กลับมารบกวนท่านอีกโดยการทำให้มันเป็นของแท้ซะเลย ทำให้เจ้า WGA ไม่มากวนใจท่านอีกต่อไป และยังสามารถติดตั้งซอฟแวร์ของไมโครซอฟท์ได้โดยที่ตัวตรวจจับมันเห็นเป็นของแท้ เรามาเริ่มกันเลยดีกว่า

1. พิมพ์ regedit ในช่อง run แล้วเข้าไปที่ HKey_Local_Machine\Software\Microsoft\WindowsNT\Current Version\WPAEvents,
ทางด้านขวา ดับเบิ้ลคลิ๊กที่ oobetimer แล้วลบตัวเลขที่อยู่ในนั้นให้หมด (จะเหลือเลข 0 อยู่สี่ตัว ลบไม่ได้)
อันนี้เป็นการล้างค่าที่ไมโครซอฟท์ใช้ตรวจสอบวินโดวส์ขอเราครับ เสร็จแล้วกด OK แล้วปิดไปได้เลย

2. จากนั้นพิมพ์ %systemroot%\system32\oobe\msoobe.exe /a ลงในช่อง run แล้วกด Enter
จะปรากฎหน้าต่างของ Activate Windows ขึ้นมา จากนั้นให้เลือกที่
Yes, I want to telephone a customer service representative to activate Windows แล้วคลิ๊กที่ Next


3. จากนั้นคลิ๊กที่ Change Product Key โดยที่ไม่ต้องใส่อะไรทั้งนั้นในหน้านี้


4. จากนั้นให้ใส่ Product Key B3P7V-Q2WTH-CRK4R-YHJRF-39H4M
แล้วคลิ๊กที่ Update เมื่อเสร็จเรียบร้อยแล้วก็ให้ปิดหน้าต่างนี้ไปได้เลย โดยคลิ๊กที่ X ที่มุมขวาบน


5. รีสตาร์ทเครื่องหนึ่งครั้ง แล้งลองพิมพ์ %systemroot%\system32\oobe\msoobe.exe /a แล้วกด Enter
จะปรากฎคำว่า Windows is already activated ถ้าขึ้นตามนี้ก็แสดงว่าทุกอย่างเรียบร้อยแล้วครับ

6. ทดสอบโดยการตรวจสอบกับทางไมโครซอฟท์ โดยการเปิด Windows Explorer แล้วเลือกที่ Help
แล้วเลือกที่ ตรวจสอบลิจสิทธิ์วินโดวส์ ถ้ามันบอกว่าเป็นของแท้ก็ลุย อัพเดท โหลดและติดตั้งโปรแกรมฟรีของไมโครซอฟท์
ทั้ง Windows Defeder , WMP11 และอื่น ๆ ได้เลย