ようこそ (Jyokoso) MY BLOG

いらっしゃいませ (hajimemashite) สำหรับผู้เข้าใหม่นะค่ะ ^^V

26 ธันวาคม 2554

for update nowait--log user update

BEGIN
SELECT CORDER_ID
INTO vn_corder_id2
FROM CORDER_HEAD
WHERE CORDER_ID = vn_corder_id1
FOR UPDATE NOWAIT;
EXCEPTION WHEN No_Data_Found THEN vn_corder_id2 := NULL;
WHEN Others THEN
IF sqlcode = -00054 THEN
is_locked := TRUE;
END IF;
IF is_locked THEN
show_stop_message('This record can''t be updated at this time because it is reserved for an update. If the record isn''t open for another user then this will clear automatically in 10-20 minutes. Please try again later.');
END IF;
END;

16 ธันวาคม 2554

14 พฤศจิกายน 2554

PLS 00201: ERROR ตอน compile pkg


Grant execute on dbms_crypto to ;
EX.
เข้า sys --> sysdba
Grant execute on dbms_crypto to stougd;
เวลาที่เรามีการเรียกใช้
pkg
DBMS_CRYPTO ถ้าไม่ Grant สิทธิ์ ให้เราจะไม่สามารถ compile ผ่านได้
EX.
vByte   
:= UTL_RAW.CAST_TO_VARCHAR2(DBMS_CRYPTO.RANDOMBYTES(1));
l_encrypted    := DBMS_CRYPTO.ENCRYPT(    src => l_ssn,
                                                                                 typ => DBMS_CRYPTO.DES3_CBC_PKCS5,
                                                                                
key => passkey);

19 ตุลาคม 2554

GET_RADIO_BUTTON_PROPERTY--> ไว้ get ค่าจากปุ่ม radio

GET_RADIO_BUTTON_PROPERTY(item_id ITEM, button_name VARCHAR2, property NUMBER); 


GET_RADIO_BUTTON_PROPERTY(item_name VARCHAR2, button_name VARCHAR2, property NUMBER);


EX. Get_Radio_Button_Property( it_id, 'REJECTED', VISIBLE);


it_id หรือ it_name เป็นชื่อของ radio group 
button_name คือ ชื่อ ปุ่มนั้นๆ เช่น cancel ok approve etc.
property คือ คุณสมบัติที่จะนำมาใช้เช่น enable, disable, label, X_POS(ตำแหน่งในแกน X)

18 ตุลาคม 2554

Exception



Oracle Exception NameOracle ErrorExplanation
DUP_VAL_ON_INDEXORA-00001คุณพยายามที่จะรันคำสั่ง INSERT หรือ UPDATE ที่มีการสร้างค่าที่ซ้ำกันใน field ที่ห้ามซ้ำเช่นเป็น PK, FK
TIMEOUT_ON_RESOURCEORA-00051คือมีการใช้ทรัพยากร หรือไม่เครื่องรันนานเกินจนหมดเวลา
TRANSACTION_BACKED_OUTORA-00061มีการ rolled back ข้อมูลขณะที่คุณกำลัง procress
INVALID_CURSORORA-01001คุณพยายามอ้างถึง cursor ที่ไม่มีอยู่ อาจเกิดจาก คุณเรียก ( FETCH cursor ) ปิด cursor ก่อน เปิด cursor.
NOT_LOGGED_ONORA-01012ไม่ได้ log-in
LOGIN_DENIEDORA-01017พยายามเข้าใช้ oracle แต่ log-in username/password ผิด 
NO_DATA_FOUNDORA-01403คุณพยายามทำต่อไปนี้ :
1. select into ที่ไม่ถูก row ไม่มีค่า return
2. ไม่อ้างอิงแถวเริ่มต้นของตาราง
3.  read ตอนท้าย ของ file ที่มีแพคเกจ UTL_FILE
TOO_MANY_ROWSORA-01422return กับมาหลาย row
ZERO_DIVIDEORA-01476หารด้วย 0 
INVALID_NUMBERORA-01722แปลงค่า string ไปเป็น number ไม่สำเร็จ
STORAGE_ERRORORA-06500หลุดออกมาจาก memory หรือ memory เสียหาย
PROGRAM_ERRORORA-06501"Contact Oracle support" เป็นปัญหาที่โปรแกรม oracle
VALUE_ERRORORA-06502invalid เป็นเพราะแปลง type data เช่น วันที่ เป็น เลขหรือใช้ trunc,to_date,to_char...
CURSOR_ALREADY_OPENORA-06511พยายามเปิด cursor แต่ cursor เปิดอยู่
PROCEDURE CHECK_DUP_BUDGET IS
al_id NUMBER;
vTmp_dup VARCHAR2(1);

BEGIN
  IF (:system.record_status in ('INSERT','NEW')) OR
(:bg_reserve_budget.forward_id <> GET_ITEM_PROPERTY( 'BG_RESERVE_BUDGET.FORWARD_ID',DATABASE_VALUE)) OR  
(:bg_reserve_budget.fwd_seq <> GET_ITEM_PROPERTY( 'BG_RESERVE_BUDGET.FWD_SEQ',DATABASE_VALUE)) OR  
    THEN
  (:bg_reserve_budget.div_code <> GET_ITEM_PROPERTY( 'BG_RESERVE_BUDGET.DIV_CODE',DATABASE_VALUE))
 
  BEGIN
 SELECT 'X'
 INTO vTmp_dup
 FROM bg_reserve_budget
 WHERE ou_code     = :parameter.ou_code
 AND              bg_type = :bg_reserve_master.bg_type
 AND              reserve_id = :bg_reserve_master.reserve_id

 AND forward_id = :bg_reserve_budget.forward_id
 AND fwd_seq = :bg_reserve_budget.fwd_seq
 AND ROWNUM = 1;

al_id := UTIL.SHOW_MESSAGE('STOP', 'STD', '00004',
GET_ITEM_PROPERTY('BG_RESERVE_BUDGET.FORWARD_ID',PROMPT_TEXT)||' '||:bg_reserve_budget.forward_id||', '||
GET_ITEM_PROPERTY('BG_RESERVE_BUDGET.FWD_SEQ',PROMPT_TEXT)||' '||:bg_reserve_budget.fwd_seq);
--Code %1 Duplicate !!!
COPY(NVL(GET_ITEM_PROPERTY('BG_RESERVE_BUDGET.FORWARD_ID',DATABASE_VALUE),'')  ,'BG_RESERVE_BUDGET.FORWARD_ID');
COPY(NVL(GET_ITEM_PROPERTY('BG_RESERVE_BUDGET.FWD_SEQ',DATABASE_VALUE),'')   ,'BG_RESERVE_BUDGET.FWD_SEQ');
RAISE FORM_TRIGGER_FAILURE;    
     
  EXCEPTION WHEN NO_DATA_FOUND THEN  NULL ;
        -- WHEN INVALID_NUMBER THEN NULL;  
      END;
  END IF;
END;

11 ตุลาคม 2554

update for reference other table

update bg_forward_budget  
set  amount = (select amount                
                       from bg_forward_master               
                       
where forward_id =   bg_forward_budget.forward_id                 
                      and bg_type  ='FW'                 and budget_year_control =2555)             
, amount_balance =(select amount                 
                               from bg_forward_master                 
                               where forward_id = bg_forward_budget.forward_id                 
                               and bg_type  ='FW'                 
                               and budget_year_control =2555)   
,  bf_amt =(select amount                
                  from bg_forward_master                 
                  where forward_id = bg_forward_budget.forward_id                 
                  and bg_type  ='FW'                 
                  and budget_year_control =2555) 
 where bg_type  ='FW'
and budget_year_control =2555  
and amount = 0

22 กันยายน 2554

UPDATE...set...= select


UPDATE suppliers a
SET supplier_name =( SELECT b.name
FROM customers b
WHERE b.customer_id = a.supplier_id)
WHERE EXISTS
  ( SELECT b.name
    FROM customers b
    WHERE b.customer_id = a.supplier_id);

07 กันยายน 2554

HAVING หลายเงื่อนไข


การใช้ having จะต้องตามหลัง group by

EX.

select a.bg_type, sum(b.amount), sum(b.add_amt), sum(b.usage_amt), sum(b.return_amt), sum(b.amount_balance)
from bg_forward_master a, bg_forward_budget b
where  b.ou_code = a.ou_code
and b.bg_type = a.bg_type
and b.forward_id = a.forward_id
and a.approve_status = 'A'
--and a.bg_type = 'FW'
and b.budget_id = '897'
and a.ou_code = '000'
and a.budget_year_control = 2554
group by a.bg_type
having (sum(b.amount)>sum(b.add_amt)
and sum(b.return_amt)>sum(b.amount_balance)
       )

ผลที่ได้คือ 2 เงื่อนไขคือ b.amount > b.add_amt และ  b.return_am < b.amount_balance

function-->ปัดเศษ

SQL :: Math Function
ABS() ใช้หาค่าสัมบูรณ์
POWER() ใช้หาค่ายกกำลัง
SQRT() ใช้หาค่ารากที่สอง
RAND() ใช้หาค่าสุ่มระหว่าง 0 และ 1
ROUND() ใช้ปัดเศษทศนิยมตามหลักสากล ตามจำนวนจุดทศนิยมที่กำหนด
CEILING() ใช้ปัดเศษให้มีค่ามากขึ้น ( ปัดเศษให้เป็นเลขจำนวนเต็ม )
FLOOR() ใช้ปัดเศษให้มีค่าน้อยลง ( ปัดเศษให้เป็นเลขจำนวนเต็ม )
SING() ไว้หาประเภทจำนวนตัวเลข ถ้า -1 (จำนวนติดลบ) , 1 (จำนวนบวก), 0 จำนวนเต็ม 0

Truncate - คือการตัดเศษ ตั้งแต่หลังจุดเอามันเอาออกหมด เช่น trunc(4.67) ก็จะได้ค่า 4 โดยไม่สนว่าเลขหลังจุดมีค่าเท่าไหร่
Floor      - เป็นฟังก์ชันปัดลง คือเลขจำนวนเต็มที่น้อยกว่าหรือเท่ากับค่าเดิมของมัน เช่น floor(5.6) = 5 หรือ floor(5.4) =5 เราไม่สนใจเลขหลังจุดเช่นกัน แต่เราจะพยายามหาจำนวนเต็มที่มาค่ามากที่สุดมาแทน
Ceiling   - เป็นฟังก์ชันที่จะตรงข้ามกับ floor คือเลขจำนวนเต็มที่มากกว่าหรือเท่ากับค่าเดิมของมัน เช่น ceil(5.6) = 6 หรือ ceil(5.4) = 6 โดยไม่สนใจเลขหลังจุด
Round   - เป็นฟังก์ชันที่ดูค่าของเศษส่วน จะถูกปัดให้เป็นเลขจำนวนเต็มมีค่าใกล้เคียงกับค่าเดิมมากที่สุด เช่น round(5.6) = 6 หรือ round(5.4) = 5

  Truncate      Floor     Ceiling    Round
3.0 3 3 3 3
3.3 3 3 4 3
3.5 3 3 4 4
3.6 3 3 4 4
-3.0 -3 -3 -3 -3
-3.3 -3 -4 -3 -3
-3.5 -3 -4 -3 -4
-3.6 -3 -4 -3 -4

02 กันยายน 2554

minus

ไว้หาความแตกต่างของ 2 table หรือ 2 query ที่มี column ที่นำมาเปรียบเทียบจำนวนเท่ากัน

syntax

select field1, field2, . field_n
from tables
MINUS
select field1, field2, . field_n
from tables;

The following is an MINUS query that uses an ORDER BY clause:

select supplier_id, supplier_name
from suppliers
where supplier_id > 2000
MINUS
select company_id, company_name
from companies
where company_id > 1000
ORDER BY 2;


select * from
(select budget_id, BG_FWD_RS_AMT,div_code -- FWD_RS_BL_AMT,/*FWD_BL_AMT,*/ BG_FWD_AMT--, BUDGET_AMT-USE_AMT USE_AMT
from bg_proj_exp_rev_yearly
where budget_year_control = 2554
--and div_code = '302'
--and (atv_code not like 'ผ%' and atv_code not like 'ผ?9%')
--and budget_id = '1'
and atv_code not like 'ผ9%'
minus
select a.budget_id, sum(a.BG_FRW_BAL), c.div_code--,/*SUM(NVL(a.FRW_BAL,0)), SUM(NVL(a.FW_BAL,0)),*/ sum(a.BG_FW_BAL)--, sum(a.BG_USAGE_BAL)
from bg_budget_movement a
, bg_proj_exp_rev_yearly c
where a.budget_year_control = 2554
and a.seq = (select max(seq)
from bg_budget_movement b
where a.ou_code = b.ou_code
and a.budget_year_control = b.budget_year_control
and a.budget_id = b.budget_id)
and a.budget_year_control = 2554
and a.ou_code = c.ou_code
and a.budget_year_control = c.budget_year_control
and a.budget_id = c.budget_id
--and c.div_code = '302'
--and (c.atv_code not like 'ผ%' and c.atv_code not like 'ผ9%')
and atv_code not like 'ผ9%'
--and a.budget_id = '1'
group by a.budget_id, c.div_code)
--where budget_id = '1226'

17 มีนาคม 2554

set REQUIRED ให้กับ item

1. ต้องสร้าง parameter ขึ้นมาเพื่อรองรับ PROMPT_TEXT

2. WHEN-NEW-FORM-INSTANCE ให้เพิ่ม
:PARAMETER.ATV_EDATE := GET_ITEM_PROPERTY('MA_REPAIR.ATV_EDATE',PROMPT_TEXT);
:PARAMETER.ATV_ETIME := GET_ITEM_PROPERTY('MA_REPAIR.ATV_ETIME',PROMPT_TEXT);

3. ไว้ที่ WHEN-RADIO-CHANGED
IF :ma_repair.repair_status = '4' OR :ma_repair.repair_status = '5' then
SET_ITEM_PROPERTY('MA_REPAIR.ATV_EDATE' , PROMPT_TEXT , '*'||:parameter.atv_edate);
SET_ITEM_PROPERTY('MA_REPAIR.ATV_ETIME' , PROMPT_TEXT , '*'||:parameter.atv_etime);
ELSE
SET_ITEM_PROPERTY('MA_REPAIR.ATV_EDATE' , PROMPT_TEXT , :parameter.atv_edate);
SET_ITEM_PROPERTY('MA_REPAIR.ATV_ETIME' , PROMPT_TEXT , :parameter.atv_etime);
END IF;


ผลคือเวลา เปลี่ยน radio ก็จะทำให้ label มี * ไว้ข้างหน้าเพื่อให้รู้ว่าต้องระบุ

16 มีนาคม 2554

FRM-40352: Last record of query retrieved.

IF :system.last_record = 'FALSE' THEN
Next_Record;
END IF;

FRM-40352 เกิดจาก next record ไปที่ last-record ไปต่อไม่ได้ดังนั้นจึงเกิด message แจ้ง วิธีที่ง่ายๆ คือ check ก่อนว่าเป็น
record สุดท้ายยังถ้าไม่ใช่ถึงจะ next ได้ ถ้าใช่ก็จะไม่ทำอะไร

25 กุมภาพันธ์ 2554

How to Create Auto Increment Columns in Oracle

After pointing out how not to create auto increment columns in Oracle, I suppose I should point out how to create auto increment columns in oracle.
Many will gripe about this not being a standard feature in Oracle, but when it’s as easy as two more commands after your CREATE TABLE command I can’t see any good reason to use fancy SQL on every insert.
First let’s create a simple table to play with.
SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));

Table created.
Now we’ll assume we want ID to be an auto increment field. First we need a sequence to grab values from.
SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;

Sequence created.
Now we can use that sequence in an BEFORE INSERT trigger on the table.
CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;
/

Trigger created.
This trigger will automatically grab the next value from the sequence we just created and substitute it into the ID column before the insert is completed.
Now we’ll do some inserts:
SQL> INSERT INTO test (name) VALUES ('Jon');
1 row created.
SQL> INSERT INTO test (name) VALUES (’Bork’);
1 row created.
SQL> INSERT INTO test (name) VALUES (’Matt’);
1 row created.
SQL> SELECT * FROM test;
ID NAME
———- ——————————
1 Jon
2 Bork
3 Matt


ที่มา :http://situsnya.wordpress.com/2008/09/02/how-to-create-auto-increment-columns-in-oracle/

14 กุมภาพันธ์ 2554

ตรวจทุก record ว่าเป็นไปตามเงื่อนไขไหม

BEGIN
    GO_BLOCK('BG_USAGE_PAYNAME');
    FIRST_RECORD;
FOR i IN 0..NVL(:bg_usage_payname.nb_cnt_rec,0) LOOP
--message(:bg_usage_payname.nb_cnt_rec);pause;
        IF     :BG_USAGE_PAYNAME.PAY_TYPE_CODE IS NOT NULL AND :BG_USAGE_PAYNAME.PAY_TYPE_CODE != STBG.GET_PARAMETER('PAY_TYPE_PAC','BG')  THEN
                UTIL.SHOW_MESSAGE('STOP','BG','B0148',STFN.PAYMENT_TYPE_NAME(STBG.GET_PARAMETER('PAY_TYPE_PAC','BG')),GET_ITEM_PROPERTY('BG_USAGE_MASTER.INTERNAL_CHARGE_YN',PROMPT_TEXT));
                :BG_USAGE_MASTER.INTERNAL_CHARGE_YN := 'N';
                RAISE FORM_TRIGGER_FAILURE;
        ELSE
                IF NVL(:BG_USAGE_MASTER.INTERNAL_CHARGE_YN,'N') = 'Y' THEN
                    Set_LOV_Property('M_PAY_TYPE_CODE_LOV',GROUP_NAME,'PAY_TYPE_CODE2_REC');
                ELSE
                    Set_LOV_Property('M_PAY_TYPE_CODE_LOV',GROUP_NAME,'PAY_TYPE_CODE_REC');
                END IF;
        END IF;
    NEXT_RECORD;
END LOOP;   
    GO_ITEM('BG_USAGE_MASTER.INTERNAL_CHARGE_YN');
END;

28 มกราคม 2554

Set_LOV_Property ต้องการเปลี่ยนดึงข้อมูลเมื่อมีค่า เปลี่ยน

BEGIN
DECLARE lov_id LOV;
BEGIN lov_id := Find_LOV('M_PAY_TYPE_CODE_LOV');
IF NVL(:BG_USAGE_MASTER.INTERNAL_CHARGE_YN,'N') = 'Y' THEN
Set_LOV_Property(lov_id,GROUP_NAME,'PAY_TYPE_CODE2_REC');
ELSE
Set_LOV_Property(lov_id,GROUP_NAME,'PAY_TYPE_CODE_REC');
END IF;
END;
END;

26 มกราคม 2554

set_block_property &DEFAULT_WHERE

SET_BLOCK_PROPERTY('IN_TRAN_HEAD', DEFAULT_WHERE,'OU_CODE = :PARAMETER.OU_CODE AND DOC_NO = ''SPO01'' AND DOC_NO =' ||CHR(39)||:parameter.p_spo_no||CHR(39));

25 มกราคม 2554

start with & connect by

select level div_level, ou_code, div_code, div_code || ' ' || div_name div_name
from su_division
where ou_code =:parameter.ou_code
start with div_parent is null
connect by prior div_code = div_parent
and prior ou_code =:parameter.ou_code

19 มกราคม 2554

Math Function

Math Function

ABS() ใช้หาค่าสัมบูรณ์
POWER() ใช้หาค่ายกกำลัง
SQRT() ใช้หาค่ารากที่สอง
RAND() ใช้หาค่าสุ่มระหว่าง 0 และ 1
ROUND() ใช้ปัดเศษทศนิยมตามหลักสากล ตามจำนวนจุดทศนิยมที่กำหนด
CEILING() ใช้ปัดเศษให้มีค่ามากขึ้น ( ปัดเศษให้เป็นเลขจำนวนเต็ม )
FLOOR() ใช้ปัดเศษให้มีค่าน้อยลง ( ปัดเศษให้เป็นเลขจำนวนเต็ม )

18 มกราคม 2554

ถ้า group by ที่เป็น character

สามารถใช้ min max ได้ แต่ถ้าเป็น sum หรืออีกหลายๆตัวจะใช้กับ number ดังนั้นใครอยากยบให้เหลือบรรทัดเดียวใช้แบบนี้ดีสุด
เช่น

SELECT MIN(emp_id),MIN(emp_name),department_id
FROM employees
GROUP BY department_id;

Subquery select ซ้อน select

EX.Subquery

SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_idFROM employees mgr);

update จาก table อื่น หรือ table เดิม

UPDATE copy_emp
SET department_id = (SELECT department_id FROM employees WHERE employee_id = 100)
WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 200);

insert โดย select จาก table หนึ่ง ลงอีก table หนึ่ง

INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

SEQ_ORDER_BY

:system.trigger_record :บอกว่าrecordที่อยู่ตอนนี้เป็นrecordที่เท่าไรจะreturnค่าเป็นnumber
:system.last_record :บอกว่าrecordที่อยู่นี้เป็นrecordสุดท้ายหรือเปล่าจะreturnค่าเป็นboolean
seq : คือค่า MAX +1
seq_order_by : เป็นค่า seq. ที่เป็นแบบ Auto Running

วิธีการทำ SEQ_ORDER_BY
KEY-ENTER-QUERY
NULL;
/****************************************************************************************************/
WHEN-CREATE-RECCORD
:ar_gl_interface.seq_order_by := TO_NUMBER(:system.trigger_record);
/****************************************************************************************************/
KEY-CLRREC
DECLARE
nTmp_seq_orderby number(5);
vTmp_BlockName VARCHAR2(100) := 'AR_GL_INTERFACE';
BEGIN
GO_BLOCK(vTmp_BlockName);
--IF UTIL.SHOW_ALERT_DELETE = 'Y' THEN
DELETE_RECORD;
nTmp_seq_orderby := :system.trigger_record;
LOOP
:ar_gl_interface.seq_order_by := :system.trigger_record;
EXIT WHEN :system.last_record = 'TRUE';
NEXT_RECORD;
END LOOP;
--END IF;
GO_RECORD(nTmp_seq_orderby);
END;
/****************************************************************************************************/
KEY-CREREC
DECLARE
nTmp_seq_orderby number(5);

BEGIN
IF :qa_user_confirm.user_id is not null THEN
nTmp_seq_orderby := :system.trigger_record;
LOOP
EXIT WHEN :system.last_record = 'TRUE';
NEXT_RECORD;
:qa_user_confirm.seq := TO_NUMBER(:system.trigger_record)+1;
END LOOP;
GO_RECORD(nTmp_seq_orderby);
CREATE_RECORD;
ELSE
message('FRM-40102: Record must be entered or delete first.');synchronize ;
END IF;
END;

/****************************************************************************************************/
KEY- DELREC
DECLARE
nTmp_seq_orderby number(5);
vTmp_BlockName VARCHAR2(100) := 'QA_USER_CONFIRM';
BEGIN
GO_BLOCK(vTmp_BlockName);
IF UTIL.SHOW_ALERT_DELETE = 'Y' THEN
DELETE_RECORD;
nTmp_seq_orderby := :system.trigger_record;
FOR I IN 1..:qa_user_confirm.nb_cnt_rec LOOP
:ar_gl_interface.seq_order_by := :system.trigger_record;
EXIT WHEN :system.last_record = 'TRUE';
NEXT_RECORD;
END LOOP;
END IF;
GO_RECORD(nTmp_seq_orderby);
END;

17 มกราคม 2554

FRM-30064 / FRM-30085 + ORA-00942 Errors

เคยเจอ error แบบนี้เวลา CTL+T หรือ ตอน run ให้ดู 2 ที่ table ที่ select ขึ้นมา collumn มีใน base จริงๆป่าว

กับดูที่ lov แล้ว copy ที่ query ไว้ไปไว้ที่ toad ลอง compile ดู ก็จะรู้ว่าติดตรงไหน ถ้าไม่ติดแสดงว่าไม่ใช่ที่นี่

ผู้หญิงมักมีเหตุผลที่ฟังขึ้นเสมอ

บ่ายวันหนึ่งระหว่างหญิงสาวสวยกำลังซักผ้าอยู่ริมน้ำนั้นแปรงซักผ้าคู่มือก็ หลุดมือจมน้ำไป หญิงสาวสวยก็ทำอะไรไม่ถูกได้แต่นั่งร้องไห้อยู่ริมน้ำ

ทันใดนั้นเองเทวดาก็ลอยขึ้นมาจากผิวน้ำแล้วถามว่า ' มีปัญหาอะไรรึ '
' แปรงซักผ้าดิฉันตกลงไปในน้ำแล้ว และตรงนี้น้ำลึกมาก
ต่อไปดิฉันจะเอาอะไรไปซักผ้าหาเลี้ยงลูกสามีได้หละท่าน '

เทวดาได้ยินดังนั้นก็ดำน้ำลงไปสักพักแล้วขึ้นมาพร้อมกับแปรงซักผ้าทองคำ
' เอ้า..แปรงซักผ้านี้ใช่แปรงซักผ้าของเจ้าใช่รึไม่ ?' เทวดาถามหญิงสาวสวย
' ไม่ใช่ค่ะ '

เทวดาก็ดำน้ำลงไปอีกครั้งกลับขึ้นมากับแปรงซักผ้าเงิน
' เอ้า..แล้วแปรงซักผ้านี้หละใช่ของเจ้ารึไม่ ?'
' ไม่ใช่ค่ะ แปรงซักผ้าของดิฉันทำจากเหล็กมีด้ามไม้เก่าๆ ไม่ใช่แปรงซักผ้าเงิน แปรงซักผ้าทอง '

เทวดาจึงดำลงน้ำไปอีกครั้งแล้วกลับขึ้นมาพร้อมกับแปรงซักผ้าเหล็กคู่มือหญิงสาวสวย
' เอ้า..แปรงซักผ้าของเจ้า แต่เราเห็นเจ้าเป็นคนดีซื่อสัตย์
ไม่โกหก เราจะให้แปรงซักผ้าเงิน กับแปรงซักผ้าทองคำแก่เจ้าไปด้วยเพื่อตอบแทนในการที่เจ้าเป็นคนดี '
หญิงสาวสวยจึงรับแปรงซักผ้าไว้แล้วกลับบ้านด้วยความสุข
หนึ่งเดือนต่อมา ..............

ระหว่าง ที่หญิงสาวสวยกำลังเดินเล่นอยู่ริมน้ำพร้อมกับสามีของเธออยู่นั้น สามีก็ลื่นตกน้ำไป หญิงสาวสวยทำอะไรไม่ถูกได้แต่นั่งร้องไห้ริมน้ำ

ทันใดนั้นเทวดาองค์เดิมก็ปรากฏกายออกมาอีกครั้ง
' เอ้าคราวนี้เจ้ามีปัญหาอะไรรึ '
' สามีดิฉันลื่นตกน้ำไปเมื่อกี้นี้ค่ะ '

ได้ยินดังนั้นเทวดาจึงดำน้ำลงไป และขึ้นมาพร้อมกับผู้ชายคนหนึ่งที่เหมือนกันกับพี่เคน ธีรเดช วงษ์พัวพันธุ์
ตั้งแต่หัวจรดเท้า ' ผู้ชายคนนี้ใช่สามีเจ้ารึไม่ ?'

'ใช่แล้วค่ะ ' หญิงสาวสวยตอบทันที

เทวดาจึงโกรธมาก เพราะเห็นว่าหญิงสาวสวยโกหกและไม่ซื่อสัตย์เหมือนก่อน

' ขออภัยด้วยค่ะท่านเทวดา มันเป็นการเข้าใจผิดค่ะ '

หญิงสาวสวยรีบชี้แจงทันใด

'ถ้าเกิดดิฉันตอบว่าไม่ใช่ ดิฉันเดาว่าท่านก็คงจะลงไปในน้ำอีกครั้ง แล้วกลับขึ้นมาพร้อมกับผู้ชายที่เหมือนกับ มาริโอ้
และเมื่อดิฉันปฏิเสธอีก ท่านก็คงจำดำลงไปอีกครั้งแล้วนำสามีดิฉันตัวจริงขึ้นมา สุดท้ายท่านก็คงจะให้ผู้ชายอีก 2 คนดิฉันด้วย
เพื่อตอบแทนที่ดิฉันไม่โกหก

แต่ว่า .... ดิฉันเป็นแค่หญิงสาวสวยจะมีปัญญาอะไรไปหาเงินเลี ้ยงสามีพร้อมกัน 3 คนได้หละค่ะ (รับไม่ไหวค่ะ ได้ทีละคน)
ดิฉันจึงจำเป็นต้องตอบว่าใช่ตั้งแต่แรก '

เทวดา ' เออ!!!จริงของมึง '

นิทานเรื่องนี้สอนให้รู้ว่า เมื่อใดที่ผู้หญิงโกหก

แสดงว่าหญิงผู้นั้นจะต้องมีเหตุผลจำเป็นในการโกหก และมีเจตนาดีอย่างแน่นอน

ที่มา : http://guru.google.co.th/guru/thread?table=%2Fguru%2F&tid=0a4d20d172e4df45&fid=0a4d20d172e4df4500049a01a1b75119

13 มกราคม 2554

CNBLUE - 사랑 빛 (Love Light)



그댈 보면 얼굴이 빨개지고
คือ แดล โบมยอน ออล กุล อี พาล แก จิ โก
그댈 보면 가슴이 두근두근
คือ แดล โบมยอน กา ซึม อี ดู กึน ดู กึน
아이처럼 수줍게 말하고
อา อี ชอ รอม ซุ จุม เก มาล ฮา โก
그댈 보면 괜시리 웃음이 나
คือ แดล โบมยอน แควน ซี รี อุซ อิม อี นา
바보처럼 자꾸만 그래
พา โบ ชอ รอม จา กู มาน คึ แร
아마 내게 사랑이 온 것 같아
อา มา แน เก ซา รัง อี อน กอซ กาทเท

그대는 내 마음 속의 President
คือ แด นึน เน มา อึม ซุก อี president
내 가슴의 별 수놓지
แน กา ซึม อี บยอล ซู นด จี
I’m Genie for you Girl
I’m Genie for you Girl
내 숨을 멎게 하지
แน ซู มึล มอช เก ฮาชี
그대가 원하는 건 다
คือ แด กา วอน ฮา นึน กอน ดา
너를 사랑하니까
นอ ลึล ซา รัง ฮา นี กา
내 사랑에 이유는 없잖아 You know
แน ซา รัง เง อี ยู นึน ออบ ชัน ฮา you know

그대는 Darling
คือ แด นึน darling
밤 하늘 별빛보다 아름다워요
บัม ฮา นึล บยอล บิช ดา อา ลึม ดา วอ โย
내 맘속 깊은 곳에서 반짝거리는
แน มัม ซก คี พึน โก เซ ซอ พัน จัก กอ รี นึน
나 만의 사랑 빛
นา มัน อี ซา รัง พิช

그대를 사랑해요 Darling
คือ แด ลึล ซา รัง เฮ โย darling
언제나 내 곁에서 빛을 내줘요
ออน เจ นา แน กยอ เท ซอ บี ชึน แนช วอ โย
매일밤 바라보고
แม อิล พัม บา รา โบ โก
바라봐도 아름다워요
บา รา บวา โด อา รึม ดา วอ โย
그댄 나의 사랑 빛
คือ แดน นาอี ซา รัง บิช

그댈 보면 구름을 나는 기분
คือ แดล โบมยอน กู รือ มึล นา นึน กี บุน
유치해도 자꾸만 그래
ยู ชี แฮ โด ชา กู มัน คือ แร
아마 내게 사랑이 온 건 가봐
ยา มา แน เด ซา รัง งี อน กอน กาบวา

그대는 Darling
คือ แด นึน darling
밤 하늘 별빛보다 아름다워요
บัม ฮา นึล บยอล บิช ดา อา ลึม ดา วอ โย
내 맘속 깊은 곳에서 반짝거리는
แน มัม ซก คี พึน โก เซ ซอ พัน จัก กอ รี นึน
나 만의 사랑 빛
นา มัน อี ซา รัง พิช

그대를 사랑해요 Darling
คือ แด ลึล ซา รัง แฮ โย Darling
언제나 내 곁에서 빛을 내줘요
ออน เจ นา แน กยอ เท ซอ บี ชึน แนช วอ โย
매일밤 바라보고
แม อิล พัม บา รา โบ โก
바라봐도 아름다워요
บา รา บวา โด อา รึม ดา วอ โย
그댄 나의 사랑 빛
คือ แดน นา อี ซา รัง บิช

그대는 Lovely
คือ แด นึน lovely
저 하늘 햇살보다 눈이 부셔요
ชอ ฮา นุน แฮช ชัล โบดา นู นี บู ชยอโย
내 맘속 어둔 곳까지 밝게 비추는
แน มัม ซก ออ ดุน กซ กา ชี บัล เก บี ชู นึน
나만의 사랑 빛
นา มาน อี ซา รัง บิซ

그대를 사랑해요 Lovely
คือ แด ลึล ซา รัง แฮ โย Lovely
두 눈을 감아봐도 그대 보여요
ดู นู ลึล คา มา บวา โด คือ แด โบ ยอ โย
이렇게 바라보고
อี รอค เก บา รา บวา โก
바라봐도 눈이 부셔요
บา รา บวา โด นู นี บู ซยอ โย
그댄 나의 사랑 빛
คือ แดน นา อี ซา รัง บิช

07 มกราคม 2554

ช่องว่าง

ฟังเพลง ช่องว่าง (เพลงประกอบละครคุณชายติดหรู คุณหนูติดดิน) ปนัดดา เรืองวุฒิ

ปนัดดา เรืองวุฒิ - ช่องว่าง
(เพลงประกอบละคร คุณชายติดหรู
คุณหนูติดดิน)
คำร้อง มณฑวรรณ ศรีวิเชียร
ทำนอง อินทัช เรืองชาญ
เรียบเรียง เรืองกิจ ยงปิยะกุล



จากคนที่ดูแตกต่าง จากคนที่ดูไกลห่าง
อย่างกับจะไม่มีทาง
ที่ทำให้เราต้องมาพบหรือเจอกัน

จากคนที่มองผ่านๆ จากคนที่ไม่สำคัญ
กลับกลายเป็นผูกพันกัน แค่เพียงหันมา
เมื่อมองตาก็รู้ใจ
เมื่อก่อนนั้น เหมือนมีช่องว่าง
ให้เธอกับฉัน
ใกล้กันก็ดูเหมือนห่างไกล

ความรักเติมเต็มช่องว่างระหว่างเรา
ที่ใครบอกกล่าววันนี้ฉันเพิ่งเข้าใจ
ความรักละลายให้ตัวฉันและเธอหมดไป
และกลายเป็นแค่เราเพียงคำเดียว

จากคนที่มองผ่านๆ จากคนที่ไม่สำคัญ
กลับกลายเป็นผูกพันกัน แค่เพียงหันมา
เมื่อมองตาก็รู้ใจ
เมื่อก่อนนั้น เหมือนมีช่องว่าง
ให้เธอกับฉัน
ใกล้กันก็ดูเหมือนห่างไกล

ความรักเติมเต็มช่องว่างระหว่างเรา
ที่ใครบอกกล่าววันนี้ฉันเพิ่งเข้าใจ
ความรักละลายให้ตัวฉันและเธอหมดไป
และกลายเป็นแค่เราเพียงคำเดียว

เจี๊ยบ วรรธนา - เพราะใจ Ost.สิ่งเล็กๆที่เรียกว่ารัก

ตื่นขึ้นมาด้วยแสงสว่าง (เพลงใครสักคน)

เพลงใครสักคน By มาช่า

ตื่นขึ้นมาทุกวัน

ฉันยังเหมือนเดิม

เริ่มชีวิต ด้วยแสงสว่าง

และยังมองเห็นแสงตะวัน ที่สดใส

แต่พอมองเข้าไป ที่ใจฉันเอง

กลับได้พบ แค่ความเดียวดาย

เก็บความเงียบเหงา ไว้ในใจมานาน

ฉันหวังได้พบ คนที่ห่วงใย

ที่มีความรัก จริงใจให้กัน

อาจมีวันนั้น ฉันคงได้พบเจอจริงจริง

อยู่แห่งไหนคนที่ฉันเฝ้าคอยเจอ

อยากจะรู้เพียง ทุกวันนี้เงาของเธอ อยู่ไหน

สุดขอบฟ้า อาจจะตามหาเธอได้

ก็คงจะไม่ยากเกินเกินที่ใจจะตาม ไปไขว่คว้า

อยากมีใครซักคน ที่เดินเข้ามา

ให้ความรัก และให้ไออุ่น

ต่อเติมชีวิต ที่ดี ให้กับฉัน

อาจเป็นใครซักคน ที่พอรู้ใจ

ที่จะพร้อม ก้าวไปด้วยกัน

และใครคนนั้น หวังซักวัน คงเจอ

อยู่แห่งไหนคนที่ฉันเฝ้าคอยเจอ

อยากจะรู้เพียง ทุกวันนี้เงาของเธอ อยู่ไหน

สุดขอบฟ้า อาจจะตามหาเธอได้

ก็คงจะไม่ยากเกิน เกินที่ใจจะตาม ไปไขว่คว้า

อยากมีใครซักคน ที่เดินเข้ามา

ให้ความรัก และให้ไออุ่น

กับใครคนนั้น ที่มีความจริงใจ

อาจมีวันนั้น ฉันคงเจอ ตัวจริง