Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > Oracle : ORA-01422 ค่าการดึงข้อมูลที่ตรงกันทั้งหมดมากกว่าจำนวนแถวที่ต้องการ



 

Oracle : ORA-01422 ค่าการดึงข้อมูลที่ตรงกันทั้งหมดมากกว่าจำนวนแถวที่ต้องการ

 



Topic : 107708



โพสกระทู้ ( 4 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



พอกรอกข้อมูลลงในฟอร์มเสร็จ กดenter ขึ้นerror ORA-01422 ค่าการดึงข้อมูลที่ตรงกันทั้งหมดมากกว่าจำนวนแถวที่ต้องการ เลยครับ ควรทำแก้ยังไงดี ที่ผมหาข้อมูลมาคือมันเกิดจาก มีการพยายาม Select Into และข้อมูลตามเงื่อนไข(where clause) เกิดมากกว่า 1 แถวข้อมูล แต่ไม่รู้จะแก้ไงดีครับ ไม่เข้าใจ รบกวนด้วยครับ


Code (SQL-Oracle)
CREATE OR REPLACE PROCEDURE WMWHSE8.IRPC_TRNUPDATE_S_SP
(
  I_TRANSFERNUM   IN        VARCHAR2,
  I_TRANSFERLINE  IN        VARCHAR2,
  I_LPN           IN        VARCHAR2,
  O_STATUS        OUT       VARCHAR2,
  O_ERRDESC       OUT       VARCHAR2
)
IS

/*  ####################################################   */

V_PROCDESC           VARCHAR2(200):=' IRPC_TRNUPDATE_S_SP ';
V_RECCOUNT           NUMBER(2);

V_FROMSTORERKEY		VARCHAR2(15);
V_FROMSKU		      VARCHAR2(50);
V_FROMLOC		      VARCHAR2(10);
V_FROMLOT          VARCHAR2(10);
V_FROMID          VARCHAR2(18);
V_FROMQTY          NUMBER(22,5);
V_FROMPACKKEY      VARCHAR2(50);
V_FROMUOM          VARCHAR2(10);

V_FROMLOC2        VARCHAR2(10);
V_QTYONHAND       NUMBER(22,5);
V_QTYALLOCATED    NUMBER(22,5);
BEGIN
   
   
   SELECT 
   COUNT(1) 
   INTO V_RECCOUNT 
   FROM WMWHSE8.TRANSFER 
   WHERE TRANSFERKEY = I_TRANSFERNUM;
   IF V_RECCOUNT = 0 THEN 
     O_STATUS := 'E'; 
     O_ERRDESC := 'ERROR CANNOT FIND TRANSFER';
     RETURN;
   END IF;

  SELECT 
  COUNT(1) 
  INTO V_RECCOUNT 
  FROM WMWHSE8.TRANSFERDETAIL 
  WHERE TRANSFERKEY = I_TRANSFERNUM 
  AND TRANSFERLINENUMBER =  I_TRANSFERLINE 
  AND STATUS IN ('0','3');
  
  IF V_RECCOUNT = 0 THEN
     O_STATUS := 'E';
     O_ERRDESC := 'ERROR CANNOT FIND TRANSFER';
     RETURN;
   ELSE
    SELECT
    FROMSTORERKEY , 
    FROMSKU , 
    FROMLOC , 
    FROMLOT , 
    FROMID , 
    FROMQTY , 
    FROMPACKKEY , 
    FROMUOM
    INTO
    V_FROMSTORERKEY , 
    V_FROMSKU ,
    V_FROMLOC ,
    V_FROMLOT ,
    V_FROMID ,
    V_FROMQTY ,
    V_FROMPACKKEY ,
    V_FROMUOM        
      
    FROM WMWHSE8.TRANSFERDETAIL
    WHERE TRANSFERKEY = I_TRANSFERNUM
    AND TRANSFERLINENUMBER =  I_TRANSFERLINE
    AND STATUS IN ('0','3') ;
   END IF;
  
  
   IF V_FROMID = I_LPN THEN
     
       SELECT
       LOC ,
       QTY ,
       QTYALLOCATED
       INTO
       V_FROMLOC2,
       V_QTYONHAND,
       V_QTYALLOCATED
       FROM WMWHSE8.LOTXLOCXID
       WHERE ID = I_LPN
       AND SKU = V_FROMSKU
       AND STORERKEY = V_FROMSTORERKEY
       AND LOC = V_FROMLOC;
       
       IF V_QTYALLOCATED > 0 THEN
         O_STATUS := 'E'; 
         O_ERRDESC := 'ERROR LPN IS ALLOCATE';
         RETURN;     
       END IF;
       
       IF V_FROMQTY <> V_QTYONHAND THEN
         O_STATUS := 'E'; 
         O_ERRDESC := 'ERROR QTY TRANSFER  <> QTY LPN';
         RETURN;     
       END IF;
   
      UPDATE WMWHSE8.TRANSFER
      SET STATUS = 3, 
      EDITWHO = 'ADMINISTRATOR' ,
      EDITDATE = SYSTIMESTAMP - INTERVAL '7' HOUR
      WHERE TRANSFERKEY = I_TRANSFERNUM
      AND STATUS IN ('0','3');
       
      UPDATE WMWHSE8.TRANSFERDETAIL
      SET STATUS = 3, 
      EDITWHO = 'ADMINISTRATOR' ,
      EDITDATE = SYSTIMESTAMP - INTERVAL '7' HOUR
      WHERE TRANSFERKEY = I_TRANSFERNUM
      AND TRANSFERLINENUMBER =  I_TRANSFERLINE
      AND STATUS IN ('0','3');
      --COMMIT;
      --RETURN;
   END IF;

   SELECT 
   COUNT(1) 
   INTO V_RECCOUNT  
   FROM WMWHSE8.LOTXLOCXID 
   WHERE ID = I_LPN
   AND SKU = V_FROMSKU
   AND STORERKEY = V_FROMSTORERKEY
   AND LOC = V_FROMLOC;
   
   IF V_RECCOUNT <> 1 THEN 
     O_STATUS := 'E'; 
     O_ERRDESC := 'ERROR CANNOT FIND PALLET IN SYSTEM';
     ROLLBACK;
     RETURN;
   END IF;

   SELECT
   LOC ,
   QTY ,
   QTYALLOCATED
   INTO
   V_FROMLOC2,
   V_QTYONHAND,
   V_QTYALLOCATED
   FROM WMWHSE8.LOTXLOCXID
   WHERE ID = I_LPN
   AND SKU = V_FROMSKU
   AND STORERKEY = V_FROMSTORERKEY
   AND LOC = V_FROMLOC;
   
   IF V_QTYALLOCATED > 0 THEN
     O_STATUS := 'E'; 
     O_ERRDESC := 'ERROR LPN IS ALLOCATE';
     RETURN;     
   END IF;
   
   IF V_FROMQTY <> V_QTYONHAND THEN
     O_STATUS := 'E'; 
     O_ERRDESC := 'ERROR QTY TRANSFER  <> QTY LPN';
     RETURN;     
   END IF;
   
   
   IF V_FROMQTY = V_QTYONHAND THEN
     UPDATE WMWHSE8.TRANSFER
     SET STATUS = 3,
     EDITWHO = 'ADMINISTRATOR' ,
     EDITDATE = SYSTIMESTAMP - INTERVAL '7' HOUR
     WHERE TRANSFERKEY = I_TRANSFERNUM
     AND STATUS IN ('0','3');
   
     UPDATE WMWHSE8.TRANSFERDETAIL
     SET STATUS = 3,
         EDITWHO = 'ADMINISTRATOR' ,
         EDITDATE = SYSTIMESTAMP - INTERVAL '7' HOUR,
         FROMID = I_LPN,
         TOID = I_LPN
     WHERE TRANSFERKEY = I_TRANSFERNUM
     AND TRANSFERLINENUMBER =  I_TRANSFERLINE
     AND STATUS IN ('0','3');
     
     O_STATUS := 'S';
     --COMMIT;
     RETURN;
   ELSE
     O_STATUS := 'E';
     O_ERRDESC := ' QTY TRANSFER > QTY ONHAND';
     ROLLBACK;
     RETURN;
   END IF;

   --O_ERRDESC := ' I_TRANSFERNUM : ' || I_TRANSFERNUM || ' I_TRANSFERLINE : ' || I_TRANSFERLINE || ' I_LPN : ' || I_LPN;  

   DBMS_OUTPUT.PUT_LINE('SUCCESS TRANSFER');
   
EXCEPTION
  WHEN OTHERS THEN
  O_STATUS := 'E';
  O_ERRDESC := TO_CHAR(SYSTIMESTAMP ,'YYYY/MM/DD HH24:MI:SS') || ' => ' ||  'ERPP ERROR ' || ' ' ||  V_PROCDESC || ' : ' || SUBSTR(TO_CHAR(SQLCODE) || ': ' || SQLERRM, 1, 2000);
  DBMS_OUTPUT.PUT_LINE(O_ERRDESC);
  ROLLBACK;
  RETURN;
END;
/




Tag : .NET, Oracle, VBScript, Device (Mobile), WebService







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-04-17 17:09:50 By : zuckerberg2 View : 2237 Reply : 1
 

 

No. 1



โพสกระทู้ ( 160 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter

ไม่ได้ดูโค้ดนะครับ
แต่ตาม error คือ จะใช้ select into ได้ ข้อมูลที่ select มาต้องมีแค่ row เดียวครับ ก็ลองเช็คดูว่า where ครบหรือเปล่า หรือต้องข้อมูลหลาย row ก็ใช้วนลูปเอาครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-04-17 23:37:15 By : natt_han
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Oracle : ORA-01422 ค่าการดึงข้อมูลที่ตรงกันทั้งหมดมากกว่าจำนวนแถวที่ต้องการ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่