PHP Oracle Transaction (oci_rollback,oci_commit) |
PHP Oracle Transaction (oci_rollback,oci_commit) ในฟังก์ชั่น oci สังเกตุว่าในการที่เราจะกระทำกับฐานข้อมูลในรูปแบบการ execute เช่น insert หรือ update ข้อมูลนั้น ใน Oracle Database ตัว oci จะกระทำข้อมูลในรูปแบบของ Transaction อัตโนมัติ ข้อมูลที่ถูก Insert หรือ Update จะยังไม่ได้มีการเกิดขึ้นจริงภายใน Database เพียงแต่ถูกทำงานภายใต้ Transaction ของ Oracle เท่านั้น แต่ในขณะเดียวกันข้อมูลที่ถูก Insert หรือ Update ในขณะนั้นสามารถทำการ Query หรือนำมาใช้ใน Process อื่น ๆ ได้หลาย ๆ Process และเมื่อผู้ใช้ทำงานจนเสร็จสิ้นตามที่ต้องการแล้ว สามารถที่จะทำการ commit หรือ rollback ข้อมูลดังกล่าวได้ครับ วิธีนี้เป็นความสามารถของ Oracle Database ที่เรารู้จักกันเป็นอย่างดีครับ
PHP Oracle Config OCI8 Support
Syntax
oci_rollback($Connection); // Rollback
oci_commit($Connection); // Commit
การทำงานของ oci_rollback และ oci_commit ภายในโปรแกรมสามารถมีได้หลาย ๆ ตัวขึ้นอยู่กับการออกแบบของผู้เขียนเอง โดยที่การ Rollback transaction จะเริ่มนับ Process เริ่มแรก หรือ Process ที่หลังจากการ Commit ไปแล้ว และจะเก็บ Transaction การทำงานจนกว่าผู้ใช้จะ Commit หรือ Rollback อีกครั้ง
Application Process
Process 1
.
.
.
oci_rollback/oci_commit
Process 2
.
.
.
oci_rollback/oci_commit
Process 3
.
.
.
oci_rollback/oci_commit
.
.
.
ถ้ายังไม่เข้าใจผมจะยกตัวอย่างให้ดูซะตัวอย่างครับ
phpOracleTransaction.php
<html>
<head>
<title>ThaiCreate.Com PHP & Oracle Tutorial</title>
</head>
<body>
<?php
$objConnect = oci_connect("myuser","mypassword","TCDB");
$strSQL = "";
$strSQL = "INSERT INTO CUSTOMER ";
$strSQL .="(CUSTOMERID,NAME,EMAIL,COUNTRYCODE,BUDGET,USED) ";
$strSQL .="VALUES ";
$strSQL .="('C005','Weerachai Nukitram','[email protected]','TH','6000000','0') ";
$objParse = oci_parse($objConnect, $strSQL);
$objExecute = oci_execute($objParse,OCI_DEFAULT);
$strSQL = "SELECT * FROM CUSTOMER WHERE CUSTOMERID = 'C005' ";
$objParse = oci_parse ($objConnect, $strSQL);
oci_execute ($objParse,OCI_DEFAULT);
$objResult = oci_fetch_array($objParse);
if($objResult["BUDGET"]=="6000000")
{
oci_commit($objConnect);
echo "Record is Commit";
}
else
{
oci_rollback($objConnect);
echo "Record is Rollback";
}
oci_close($objConnect);
?>
</body>
</html>
คำอธิบาย
จากตัวอย่างจะเป็นการ Insert ข้อมูลลงใน Record โดยจะยังไม่ Commit Transaction และ เงื่อนไขต่อมาจะเป็นการตรวจสอบว่าข้อมูลที่ Insert ลงไปมีค่าตรงตามที่ต้องการหรือไม่ ถ้าตรงตามที่ต้องการก็ให้ oci_commit หรือ oci_rollback
การใช้ Transaction มีความจำเป็นมากในระบบที่ต้องการความถูกต้องสูง ซึ่งในตัว Oracle Database เอาสามารถใช้ Transaction แบบ Multiple Query หรือในขณะที่อยู่ใน Transaction สามารถทำการ Query ข้อมูลได้หลาย ๆ Query เหมาะสำหรับการใช้ใน Process ที่มีความซับซ้อนการตรวจสอบความถูกต้องของข้อมูล ก่อนการ Commit หรือ RollBack
Oracle Server Tutorials
Reference : https://www.thaicreate.com/php-manual/ref.oci8.html
|