วันนี้เกิดปัญหาข้อมูลรายงานเป็น 0 ซึ่งถือว่าเป็นสถานะการณ์ที่ผิดปกติมาก ปกติมันก็มีข้อมูลอยู่ทุกวันนี่หน่า  ไล่ไปไล่มา Program เรียกใช้ Function  ใน Database

ตอนแรกคิดว่า ติดเรื่อง Synonym ให้กับ rule  ADM   (ที่ทำงานผมให้แยกระหว่าง DBA และ ADM,  ADM ใช้สำหรับโปรแกรมเรียกใช้งานผ่านตัวนี้เพราะเรื่องของสิทธิ์และ Security)

บอกน้องในทีม OK  งั้น Create Synonym ให้กับ Function ก็แล้วกัน

ลองเรียกใช้ มันก็ติดประเด็นอีก เรียกไม่ได้   OK Grant สิทธิ์ให้ Role ก็แล้วกัน  แต่ด้วยสิทธิ์ของ Developer อย่างพวกผมทำไม่ได้ ก็ต้องพึ่งใบบุญจาก DBA  เลยสั่งให้น้อง e-mail ไปบอก

เวลาผ่านไปสักพัก มีข้อความตอบกลับมาว่า

db2 ไม่สามารถ create synonym ให้กับ function ได้ครับ

 

ในกรณีนี้คงต้อง deploy function SUM_STATUS_BRANCH ด้วย schema ADM เพิ่มครับ ถึงจะสามารถ run statement ดังกล่าวได้ครับ

DB2 ทำพิษอีกแล้วเรา 555+

Dexron ATF – Automatic Transmission Fluid ซึ่งเป็นน้ำมันสำหรับเกียร์อัตโนมัติที่ได้รับความนิยมอย่างสูงมาก ได้รับการเลือกให้นำไปใช้กับเกียร์อัตโนมัติของรถยี่ห้อต่างๆ กว่า 70% ของโลกแห่งเกียร์อัตโนมัติก็ว่าได้ ส่วนน้ำมัน ATF ชนิดอื่นๆ ที่เหลืออยู่ในสัดส่วนอีก 30% ได้แก่ Ford Type (Mercon) / Audi-VW ATF / Mopar ATF (Chrysler) / Hondamatic และ Diamond ATF (Mitsubishi) ทั้งหมดนี้ส่วนใหญ่จะผลิตใช้อยู่ในแวดวงเฉพาะ ใช้งานกับรถยี่ห้อนั้นๆ เป็นหลัก
เมื่อเป็นดังนี้ ลองมาดู Dexron ATF ที่ GM – General Motors เป็นเจ้าของลิขสิทธิ์น้ำมัน ATF ชนิดนี้อยู่ ที่แน่ๆ คือ GM จะใช้ Dexron ATF กับรถในเครือของตัวเองคือ แคดิแลค โอล์สโมบิล บิวอิค พอนทิแอค จีเอมซี เชพโรเล่ท์ โฮลเด้น โอเปิล วอกซ์ฮอล ซ๊าบ และแซทเทิร์น เป็นต้น ซึ่งในยุคแรกที่ GM ออก ATF มานั้นคือ Dexron แต่ถ้าจะเรียกให้เต็มยศก็ต้องเรียกกันว่า Dexron ATF Type ใช้เซอร์วิสมาตั้งแต่ยุค 50’s – 60’s คุณสมบัติของ Dexron ยุคแรกคือเป็นน้ำมันไฮโดรลิคที่มีค่าความหนืดปานกลาง (V.I. – Viscosity Index 160) ทนความร้อนได้ดีและไม่รวมตัวกับอากาศง่าย ทำให้มีอายุการใช้งานได้ยาวนาน สามารถใช้กันตลอดชีพหรือ Lift Time Service ได้เลยสำหรับรถอเมริกันในยุคนั้น ชนิดที่ว่าซีลแคร้งเกียร์อย่างดีและไม่ต้องมีช่องถ่ายน้ำมัน (Drain Plug) กันเลยล่ะ
ผ่านมาถึงยุค 70’s GM อาจเพิ่งนึกได้ จึงเริ่มกำหนดตารางการเปลี่ยนถ่ายน้ำมันเกียร์อัตโนมัติ พร้อมกับออก Dexron Type II ATF ซึ่งมีการพัฒนาเพิ่มสารเติมแต่ง (Additive) ใน Dexron II หลายตัวทีเดียว เช่นสารป้องกันน้ำมันเครื่องเป็นฟอง สารป้องกันการกัดกร่อนของโลหะเป็นต้น ขณะเดียวกันยังคงยืนค่า V.I. ไว้สูงสุดที่ 165
ในปี 1994 ก็มี Dexron III ออกมาสู่ตลาด พร้อมกับค่าความหนืดที่สูงถึง V.I 205 แน่นอนว่า GM แนะนำให้ใช้ Dexron III ทดแทน Dexron II และ Dexron (I) ในรถใหญ่ (Full Size) ในเครือของ GM ทั้งหมด เพราะเกียร์อัตโนมัติของรถ Full Size ใช้แผ่นคลัตช์ (Friction Plate) ที่หนาเกิน 3 มิลลิเมตรขึ้นไป
ส่วนในรถขนาดเล็กที่ผลิตก่อนปี 94 ไม่อยู่ในข้อแนะนำให้ใช้ Dexron III เพราะการระบายความร้อนจากการทำงานภายในเกียร์ผ่านออกทาง ATF ที่มี V.I. สูงเกิน 200 นั้น ค่อนข้างช้า อาจทำให้แผ่นคลัตช์เกิดความร้อนสะสมจนในที่สุดเนื้อแผ่นคลัตช์จะไหม้จนหมดความฝืด และจะลื่นหลังจากใช้ Dexron III แทน Dexron II ไปแล้ว 5000 – 10000 กิโลเมตร แล้วแต่ความรุนแรงจะหนักในการใช้งาน ส่วนผลเสียจากการใช้ Dexron III แทน Dexron II ในระยะสั้นนั้นไม่มีอาการเสียหายให้เห็นที่ชัดเจน …
– – – – – – – – –
สรุปคร่าวว่า -DX-II ความหนืดประมาณ 160 -DX-III ความหนืดประมาณ 205 -ไม่แนะนำให้ใช้ทดแทนกันในรถขนาดเล็ก -จะเริ่มออกอาการที่ราว ๆ 5,000-10,000 กม.ไปแล้ว -ยังไม่พบรายงานความเสียหาย เมื่อใช้งานในระยะสั้น 1. แบบที่มีไม้วัดระดับน้ำมันเกียร์auto ใช้น้ำมันATF DEXRON II-D
2. แบบที่ไม่มีไม้วัดระดับน้ำมันเกียร์auto ใช้ น้ำมันATF ของ VW-Audi
ปล. นอกเหนือจากคำตอบด้านบน ท่านเจ้าของรถต้องรับความเสี่ยงด้วยตัวของท่านเองครับ

ref: http://www.vwwatercoolerclub.com/webboard/index.php?topic=1023.0

Posted by: piman007 | 30-03-2012

Top 3 ways to return TOP 10 rows by an SQL query

In the past couple of months we have had quite a bit of influx of new people trying out DB2. Most have previous experience with other DBMS like Oracle, Microsoft SQLServer, MySQL, and PostgreSQL. I see that reflected in the volume of the questions that appear quite simple for those of us who have been around DB2. However, if you paid for your kids braces with your Oracle SQL skill, the way you do things in DB2 may not be as apparent. Just today I got a lengthy list of questions from an ISV looking to make use of DB2 on the Cloud. So, I decided to write a few posts that may take DB2 people back to basics but, I hope, will make DB2 a bit more familiar to those who have not tried it before. This is the first post in what I hope will be a mini-series on how to get things done in DB2 for those that know how to get things done in other SQL databases.

One of the questions that I got was: “Can you define in the SQL itself a maximum number of retrieved rows (“TOP” in SQL Server, “rownum” in oracle)?” Let me start by saying that I love it when people ask this question. Why? Because for the longest time I would come across code where a programmer would use the simplest SQL to fetch out a huge result set, sort it in the application to find the top 10 rows and dump the rest. Every decent DBMS out there lets you do it right; there is absolutely no excuse for this type of sillines. I am being kind here.

For example, in Microsoft SQL Server you would use TOP: SELECT TOP 10 column FROM table

MySQL and PostgreSQL SQL would use LIMIT like so: SELECT column FROM table LIMIT 10

PostgreSQL v8.3 and later can also use this more standard SQL: SELECT column FROM table FETCH FIRST 10 ROWS ONLY

An Oracle programmer would write SELECT column FROM table WHERE ROWNUM <= 10

In Sybase, you would set rowcount SET rowcount 10 SELECT column FROM table

DB2, as you would expect, also has special SQL syntax to limit the number of rows returned by a query. You can simply append FETCH FIRST n  ROWS ONLY to you query and you are set. By the way, this is SQL:2008 standard but I doubt many people care.

SELECT column FROM table FETCH FIRST 10 ROWS ONLY

So, method number one is to simply use the SQL syntax that is native to your database to limit the number of rows returned. If your DBMS does not have that, consider switching to a database that does. DB2 Express-C is free and it is a great choice.

Now, it turns out that this is only one of the ways you can achieve the goal of improving performance of your SQL queries by limiting how much data travels from the database to your application. One very interesting and very unique thing about DB2 is that it is a bit of a chameleon when it comes to SQL. You can actually make DB2 pretend to be an Oracle database for example. An excellent feature if your application is written for Oracle or if you are more comfortable with using Oracle SQL. This capability was introduced in a year or so ago and has been greatly enhanced in DB2 v9.7.1 and v9.7.2 that was shipped in May of 2010. Making DB2 behave like Oracle simply requires typing in this command:

db2set DB2_COMPATIBILITY_VECTOR=ORA

If you do that, you would be able to use Oracle SQL syntax to get the top 10 rows i.e. SELECT column FROM table WHERE ROWNUM <= 10 Unfortunately, if you are using the free DB2 Express-C, you are not going to be able to set the DB2 compatibility vector to Oracle. At least not yet. However, all other editions of DB2 will allow you to do set the compatibility vector to Oracle. This means that you can upgrade to say a yearly subscription for DB2 Express and get extra resources (extra 2GB of memory and extra 2  CPU cores), IBM 24*7 support, and extra features including oracle compatibility. The price is exactly the same (actually $4 cheaper/year) as comparable subscription for MySQL. DB2 v9.7.2 brought two additional personalities that DB2 can assume. With DB2 v9.7.2 we introduced an optional feature called “SQL Skin for Sybase ASE” which lets one use Sybase SQL syntax when working with DB2. SQL Skin for Sybase ASE. Take a look at this screencast on ChannelDB2.com to learn more about SQL Skin for Sybase ASE. The other personality that we added in DB2 v9.7.2 is “MYS”, and yes, it stands for MySQL. But be careful how you pronounce it. You activate it by using the familiar command: db2set DB2_COMPATIBILITY_VECTOR=MYS

Unlike Oracle and Sybase compatibility vectors which adress a very extensive set of SQL for these DBMS, MySQL compatibility vector only addresses two SQL clauses LIMIT and OFFSET. We had to start somewhere! Unlike Oracle and Sybase compatibility vectors, MySQL compatibility vector is available in the free DB2 Express-C. It is actually enabled by default. Getting back to the topic of this post, you now know that you can use not just DB2, but also Oracle, Sybase and MySQL SQL syntax to limit the number of rows returned by a query. Personally, I really like MySQL syntax SELECT column FROM table LIMIT 10 because it just makes sense. And the best thing about using LIMIT from MySQL is that it can also be used in DELETE and UPDATE statements. And, for something completely off the wall, you should know that MySQL does not accept variables as part of the LIMIT clause (supposed to be fixed in the upcoming version of MySQL) but DB2 is quite content to use variables with LIMIT.

As interesting as it is to limit query results through SQL, I believe that the right way to do this is not SQL at all. Why not? Well, as you have seen, SQL syntax varies greatly. Every decent API out there supports database independent way of restricting the size of the result set. For example in ActiveRecord in in Ruby on Rails you would do something like this Person.find(:all, :limit => 10) to return ten people records. In Java, when using JDBC you would set statement property MaxRows like so: stmt.setMaxRows(10); String select = "SELECT * FROM MYTABLE"; java.sql.ResultSet rset = stmt.executeQuery(select); to achieve the same result. In ODBC, you would use SQLSetStmtOption to set SQL_ROWSET_SIZE to 10. As I said, most semi-modern data APIs provide a database independent way to limit the number of rows returned by a query.

So, the 3 ways to to return top 10 rows by an SQL query are:

  1. use your DBMS’s native SQL syntax. For DB2 it is SELECT column FROM table FETCH FIRST 10 ROWS ONLY
  2. If working with DB2 v9.7.2 use SQL syntax of the database you are familiar with. For example, use MySQL SQL syntax SELECT column FROM table LIMIT 10
  3. Use DBMS independent way to limit result set size provided by your favorite API

PS. I do realize that I did not demonstrate how to do TOP 10. Simply add appropriate ORDER BY clause to any of the statements mentioned to sort results according to the desired criteria. Limiting sorted results to 10 will give you TOP 10.

Ref: http://freedb2.com/2010/07/14/top-3-ways-to-return-top-10-rows-by-an-sql-query

พิมพ์  “unreg”  ส่งไปที่ 42665 และเข้า Website  Facebook เพื่อลบเบอร์โดยไปที่ Account/Account Setting/Mobile/Remove หมายเลขมือถือ /Save Preferences

Posted by: piman007 | 18-03-2012

AIS Error 619

เมื่อเช้าต่อ aircard  3G ของ AIS แล้วเจอ error ดังข้อความข้างล่าง

Error 619:A connection to the remote computer could not be established,  so the port used for this connection was closed

เช็คไปเช็คมา อ้อ sim 0ne-2-call เงินหมดนั่นเอง เติมเงินเข้าไปก็ใช้ได้แล้ว

Older Posts »

หมวดหมู่