全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1287
推到 Plurk!
推到 Facebook!

IB中 INSERT INTO 的問題

答題得分者是:Fishman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-01 02:46:50 IP:61.71.xxx.xxx 未訂閱
請問各位! 有 T1,T2兩個TABLE T1 有 A,B,C,D,E 五個欄位 T2 有 A,B,C 三個欄位 我要把 T2的記錄新增到 T1, 同時把 T1.D, T1.E欄位填入一值 我使用 IBSQL 元件, FIREBIRD 1.5版, 試了以下的寫法無法成功 INSERT INTO T1 (A,B,C,D,E) SELECT A,B,C,"DATA1","DATA2" FROM T2 WHERE .... 出現 arithmetic exception, numeric overflow, or string truncation, 我查了一下有關sql的文件, 這樣的寫法是符合 ANSI-92的語法, 應該是可 以通用的, 但不知在 IB無法接受, 不知有沒有其他使用IB的網友有遇到這樣 的狀況知道如何解決的, 謝謝! 發表人 - P.D. 於 2004/03/01 02:50:55
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-01 08:34:30 IP:210.65.xxx.xxx 未訂閱
Hi:    P.D. 大大,確認一下 T1 的 A,B,C 三個 Field Type 必須與 T2 一致,且長度須大於等於 T2 中的設定     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- 發表人 -
------
Fishman
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-01 11:56:24 IP:61.71.xxx.xxx 未訂閱
引言: Hi: P.D. 大大,確認一下 T1 的 A,B,C 三個 Field Type 必須與 T2 一致,且長度須大於等於 T2 中的設定 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ---------------------------------- 發表人 - >< face="Verdana, Arial, Helvetica"> 謝謝 Fishman兄說明, 好一陣子沒看到你了! 我的 T1, T2 A,B,C三個欄位是完全一樣的, 我這個T1的功能就是用做LOG記錄 之用的, 當 T2有任何異動時, 我要記錄T2異動前的狀況, D,E則是記錄何人異動 及時間的!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-01 13:00:42 IP:61.71.xxx.xxx 未訂閱
我已經找到問題所在 要多謝Fishman的提醒, 問題不在語法, 也不在於 A,B,C三個欄位, 原因是 'DATA1', 'DATA2' 兩個值我是以變數代入, 變數是由資料庫來的, 資料庫的欄位結構是 CHAR(20)(請注意不是 VARCHAR), 但儲存的字串不到10BYTE, 而我的 D, E 欄位是CHAR(10), 在除錯時沒有注意到這個假象, 所以造成 STRING TRUNCATION 的錯誤! 謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-01 13:07:08 IP:210.65.xxx.xxx 未訂閱
Hi:    P.D. 大大,很抱歉因無 InterBase 實際經驗,僅能就 SQL 部分提出建議    1.確認該 Select 語法可以被 InterBase 接受 SELECT A,B,C,"DATA1","DATA2" FROM T2 WHERE .... 2.若該 Select 語法可以接受,確認 T1(Log Table)內的欄位 Type 與 Length 3.簡化一下語法,確認 InterBase 可以接受該語法 INSERT INTO T1 (A,B,C,D,E) SELECT A,B,C,"DATA1","DATA2" FROM T2 WHERE .... 以下為我目前在用的一段 SQL Command(Oracle 8.0.5.1.0),由 D6 中執行,供你參考
BEGIN
    INSERT INTO MISAPPS.WWEI_OE_ITEM_FORECASTS_A
           (AUDIT_TIMESTAMP,
            AUDIT_TRANSACTION_TYPE,
            AUDIT_USER_ID,
            AUDIT_USER_NAME,
            AUDIT_TRUE_NULLS,
            AUDIT_SESSION_ID,
            AUDIT_SEQUENCE_ID,
            AUDIT_COMMIT_ID,
            FORECAST_ID,
            ORG_ID,
            MASTER_ORGANIZATION_ID,
            SALESREP_ID,
            INVENTORY_ITEM_ID,
            PERIOD_YEAR,
            PERIOD_MONTH,
            SELLING_PRICE,
            SQFT,
            ENABLED_FLAG)
    SELECT  SYSDATE,
            'D',
            NVL(:P_USER_ID,-1),
            NVL(:P_USER_NAME,'Unknown'),
            'YYYYYYYYYY',
            NVL(USERENV('SESSIONID'),-1),
            0,
            0,
            FORECAST_ID,
            ORG_ID,
            MASTER_ORGANIZATION_ID,
            SALESREP_ID,
            INVENTORY_ITEM_ID,
            PERIOD_YEAR,
            PERIOD_MONTH,
            SELLING_PRICE,
            SQFT,
            ENABLED_FLAG
    FROM    MISAPPS.WWEI_OE_ITEM_FORECASTS F
    WHERE   FORECAST_ID = :P_FORECAST_ID;
    DELETE FROM MISAPPS.WWEI_OE_ITEM_FORECASTS WHERE FORECAST_ID = :P_FORECAST_ID;
    INSERT INTO MISAPPS.WWEI_OE_ITEM_FORECAST_LINES_A
           (AUDIT_TIMESTAMP,
            AUDIT_TRANSACTION_TYPE,
            AUDIT_USER_ID,
            AUDIT_USER_NAME,
            AUDIT_TRUE_NULLS,
            AUDIT_SESSION_ID,
            AUDIT_SEQUENCE_ID,
            AUDIT_COMMIT_ID,
            FORECAST_ID,
            FORECAST_LINE_ID,
            ORG_ID,
            ORGANIZATION_ID,
            FORECAST_QUANTITY,
            PRIOR_SHIPPED_QUANTITY,
            PRIOR_SHIPPED_AMOUNT,
            ORDERED_QUANTITY,
            ORDERED_AMOUNT,
            SHIPPED_QUANTITY,
            SHIPPED_AMOUNT,
            SQFT,
            ENABLED_FLAG)
    SELECT  SYSDATE,
            'D',
            NVL(:P_USER_ID,-1),
            NVL(:P_USER_NAME,'Unknown'),
            'YYYYYYYYYYYYY',
            NVL(USERENV('SESSIONID'),-1),
            0,
            0,
            FORECAST_ID,
            FORECAST_LINE_ID,
            ORG_ID,
            ORGANIZATION_ID,
            FORECAST_QUANTITY,
            PRIOR_SHIPPED_QUANTITY,
            PRIOR_SHIPPED_AMOUNT,
            ORDERED_QUANTITY,
            ORDERED_AMOUNT,
            SHIPPED_QUANTITY,
            SHIPPED_AMOUNT,
            SQFT,
            ENABLED_FLAG
    FROM    MISAPPS.WWEI_OE_ITEM_FORECAST_LINES
    WHERE   FORECAST_ID = :P_FORECAST_ID;
    DELETE FROM MISAPPS.WWEI_OE_ITEM_FORECAST_LINES WHERE FORECAST_ID = :P_FORECAST_ID;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-11-23 9:59:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!