iT邦幫忙

1

SQL 問題INSERT SELECT結果跟SELECT結果不同 有哪些可能原因

  • 分享至 

  • xImage

公司使用的資料庫是Oracle
工具是TOAD

在使用INSERT SELECT去將資料庫內已有的資料整理並新增至其他表格時
實際新增的資料行數
與單獨使用SELECT查詢得到的行數不同

感覺就像在寫入資料時不明原因中斷一樣
但又沒有看到任何錯誤訊息

明明除了insert以外其他條件都一樣
為何無法得到相同的結果

感覺是新表格有trigger
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
尼克
iT邦大師 1 級 ‧ 2024-08-12 09:54:22

在 "Insert、Update、Delete" 之後, 可利用 "SQL%RowCount", 即可滿足上述的需求.
若 "SQL%RowCount = 0", 則表示 "DML 無處理任何資料" or "DML 執行失敗".
若 "SQL%RowCount > 0", 則表示 "DML 有處理資料成功", 且 "其值" 便是處理的資料筆數.

-- 建立暫時 Table
CREATE TABLE tom1 (aa VARCHAR2 (100));
-- 新增測試資料
INSERT INTO tom1
     VALUES ('1');
INSERT INTO tom1
     VALUES ('11');
INSERT INTO tom1
     VALUES ('2');
-- 測試
BEGIN
   -- 新增
   INSERT INTO tom1
        VALUES ('3');
   DBMS_OUTPUT.put_line ('新增筆數 = ' || SQL%ROWCOUNT);
   -- 修改
   UPDATE tom1
      SET aa = 'test' || aa
    WHERE aa LIKE '1%';
   DBMS_OUTPUT.put_line ('修改筆數 = ' || SQL%ROWCOUNT);
   -- 刪除
   DELETE FROM tom1;
   DBMS_OUTPUT.put_line ('刪除筆數 = ' || SQL%ROWCOUNT);
   COMMIT;
END;
-- 移除暫時 Table
drop table tom1;

你用TOAD應該就可以簡易看到DBMS_OUTPUT訊息。

0
郭家良
iT邦新手 5 級 ‧ 2024-09-28 16:56:39

資料庫裡會不同操作有不同的隔離層級,有可能有transaction的批量操作
更細節蠻建議參考 https://jums.gitbook.io/mysql-shi-zhan-45-jiang/03-shi-wu-ge-li-wei-shi-mo-ni-gai-le-wo-huan-kan-bu-jian

我要發表回答

立即登入回答