วันศุกร์ที่ 24 มกราคม พ.ศ. 2557

ISO8601 TimeZone กับ Oracle PLSQL

ตัดสินใจส่ง XML เข้าไป Parse ใน Oracle procedure แทนที่จะ Parse ด้วย Erlang แล้วส่งไป ซึ่งก็น่าจะดีกว่า (หันไปเขียน PL อย่างเดียว)

แต่พอ Extract XML มาก็เจอปัญหา ISO8601 ที่ก่อนนี้ผมใช้ Erlang iso8601 library parse ออกมาแล้ว convert เป็น Oracle DateTime format ก่อนนำไปยัดเข้า Statement แล้วส่งผ่าน ODBC/OCI

แต่พอเป็น PL เหมือนต้องเรียนใหม่ (เหมือนเขียน Pascal เลยนะ) หาทาง Convert ISO8601 ที่ Generate มาจาก .net ไม่เจอ เพราะ format ที่มาเป็นแบบนี้

2013-08-30T14:26:58.1640094+07:00

ค่อยๆ ไล่ที่ละตัวจนได้ format

yyyy-mm-dd"T"hh24:mi:ss.ff7

ด้วย function TO_TIMESTAMP ของ PL

แต่ TimeZone นี่สิยังไม่ผ่าน อ่านในเอกสารพบว่า

ถ้าเป็น named timezone เช่น
CET : Central European Time
PST : Pacific Standard Time
ให้ใช้ TZR

ถ้าเป็น +/- เวลาเช่น
+07:00 ประเทศไทยเรา
ให้ใช้ TZH:TZM

แต่ลองใช้ยังไงก็เจอ ORA-01821 : date format not recognised

สุดท้าย พบว่า ต้องใช้ TO_TIMESTAMP_TZ ก็เสียเวลาปีสามชั่วโมงเต็มๆ

TO_TIMESTAMP_TZ('2013-08-30T14:26:58.1640094+07:00',  'yyyy-mm-dd"T"hh24:mi:ss.ff7TZH:TZM');


ไม่มีความคิดเห็น:

แสดงความคิดเห็น