當前位置:首頁 » 存儲配置 » oracle存儲過程更新

oracle存儲過程更新

發布時間: 2022-06-11 12:26:53

⑴ Oracle存儲過程,更新大量數據,如何循環分批次提交

可通過以下方法:

以100條數據為例,如果海量數據可參考。

如test表中有如下數據:

sql">declare
iint;--定義變數
v_countint;--定義變數
v_loopint;--定義變數
begin
selectcount(*)intov_countfromtest;--計算表內數據總數
selectceil(v_count/10)intov_loopfromal;--計算需要循環次數
i:=1;--為i賦值
whilei<=v_looploop--循環退出條件
updatetestsetbegintime=<=10;--執行更新
commit;--提交
i:=i+1;--i依次加1
endloop;--結束循環
end;

⑵ ORACLE中,寫一個存儲過程來更新表中的某個欄位值

給你思路, 首先查出表中總數 ,保存總數, 然後定義一個當前條數,從0開始,每次調用給它加5000。update語句執行則用rownum,跟你保存的當前條數作為條件判斷.

⑶ oracle 更新的存儲過程怎麼寫

UPDATETESTOPT1
SETDEVICE_NO=
(SELECTRN
FROM(SELECTNAME,ROWNUMRN
FROM(SELECTDISTINCTNAMEFROMTESTOP))T2
WHERET1.NAME=T2.NAME);

COMMIT;

⑷ ORACLE存儲過程中更新變數值的語句

oracle的pl/sql採用的是類似pascal的語法,所以賦值語句為:=
r_LoseID_Flag 是變數嗎?那應該這樣:
r_LoseID_Flag:='N';

⑸ oracle 存儲過程插入或更新數據

create or replace trigger ggxx_s_update
BEFORE update on up_org_station
for each row
declare
-- local variables here
PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN
update up_org_station_tmp
SET 欄位1= :NEW.欄位1,
--********
-- 剩下的欄位你自己寫 up_org_station_tmp 表結構與up_org_station一致
WHERE up_org_station_tmp.id = :OLD.id
COMMIT;
GGXX; --存儲過程中 up_org_station 改為 up_org_station_tmp
COMMIT;
end ggxx_s_update;

⑹ Oracle批量更新在存儲過程中執行很慢,但單獨執行很快

  • 檢查被更新欄位和條件欄位是否添加索引

  • 重建索引

  • 檢查資料庫臨時表空間是否已滿,已滿手動清空(新建臨時表空間,然後重新綁定,然後刪除原臨時表空間)

⑺ oracle 包中的存儲過程 能否實現 單個的更新或者添加

這不可能,更新編譯package時,需要在這整個包上申請鎖,如果是正在運行的package,你可能申請不到這個鎖。如果這是一個被頻繁調用的package,可能你就完不成這個任務。為了保證一致性,oracle不允許你這么做

⑻ Oracle存儲過程的更新插入問題。

--向TESTSQL插入TESTSQL不存在的數據
INSERTINTOTESTSQL
(ID,NAME)
SELECTID,NAME
FROMTEST@SQLLINKAA
WHERENOTEXISTS(SELECTIDFROMTESTSQLBBWHEREBB.ID=AA.ID);
--修改TESTSQL
UPDATETESTSQLAA
SETAA.NAME=
([email protected]=AA.ID);

我覺得有點沒必要寫存儲過程,上面兩條sql完全可以實現你的需求,如果非要寫成存儲過程,按照上面兩條sql改寫就可以了

⑼ oracle存儲過程更新一段時間的數據,給定一個時間,更新這個時間之後的一段時間的表中一些欄位的數據

CREATE OR REPLACE PROCEDURE test_xh(vi_date IN VARCHAR2,vi_rc IN NUMBER)
IS
v_date VARCHAR2(8);
e_date VARCHAR2(8);
b_date VARCHAR2(8);
BEGIN
v_date := vi_date;
b_date := substr(v_date,1,6)||'01';
e_date := '20130210';
--更新指定日期的日產量
UPDATE test_1 a SET a.rc = vi_rc WHERE a.reportdate = v_date;
COMMIT;

--循環開始,判斷當前日期大於截止日期時跳出,小於時更新月累計
LOOP
IF v_date>e_date THEN
EXIT;
END IF;
UPDATE test_1 a SET a.ycl=(
SELECT SUM(b.rc) from test_1 b WHERE b.reportdate>=b_date AND b.reportdate<=v_date )
WHERE a.reportdate = v_date;
COMMIT;

v_date:=to_char(to_date(v_date,'YYYYMMDD')+1,'YYYYMMDD') ;

END LOOP;

END;

⑽ oracle利用存儲過程更新數據,怎麼優化

大數據量表盡量要避免全表掃描,全部掃描會按順序每條記錄掃描,對於>100萬數據表影響很大。
Oracle中通過RowID訪問數據是最快的方式
對欄位進行函數轉換,或者前模糊查詢都會導致無法應用索引而進行全表掃描
對Oracle共享池和緩沖區中的Sql必須要大小寫都完全用上才能夠匹配上!

熱點內容
手機mc怎麼玩伺服器國際服 發布:2025-01-11 06:18:33 瀏覽:156
win2008ftp中文亂碼 發布:2025-01-11 06:10:03 瀏覽:867
平板配置為什麼這么低 發布:2025-01-11 06:05:30 瀏覽:621
可編程視頻 發布:2025-01-11 06:03:24 瀏覽:785
java多線程編程實戰 發布:2025-01-11 06:03:17 瀏覽:631
圖的演算法java 發布:2025-01-11 05:57:07 瀏覽:482
梯形圖編譯器 發布:2025-01-11 05:56:26 瀏覽:260
安卓framework編譯 發布:2025-01-11 05:55:00 瀏覽:696
加密學原理 發布:2025-01-11 05:54:20 瀏覽:788
ocr編程 發布:2025-01-11 05:51:24 瀏覽:253