oracle存儲過程while
1. oracle存儲過程怎樣批量插入新數據
需要生成的sql
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存儲過程實現
create or replace procere proc_casekey_upstate
as
casekey char(14);
begin
for i in 1..10000000 loop
casekey := 'TMP'||lpad(i,7,0); -- TMP0000001
insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
end loop;
commit;
end;
begin
proc_casekey_upstate();
end;
測試發現生成一千萬條數據用了14分鍾左右,性能還是可以了,如果先去掉TMP_NUM_STATUS_ID的外鍵估計更快。
或者:
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from al connect by level <= 1000000;
2. oracle存儲過程循環插數據
有以下幾個步驟。
在表account中循環插入數據,id從1001到1005。createor
replace
procere
test
is--存儲過程,名稱為test。v_id
int;
--聲明變數。begin。v_id
:=1001;
--ACCOUNT_ID從1001插到1005。while
v_id
<=1005--設置插入的次數。loop。
3. Oracle 定義存儲過程 不能執行,處於無效狀態。
無效狀態有兩種可能,一種是你的存儲過程編輯沒有成功,創建了,但裡面有語法錯誤。
還有一種是存儲過程使用的表有結構上的改變,需要重新編譯一下。
你重新編譯一下,如果不成功,就是有語法問題,你需要修改存儲過程。
4. oracle存儲過程問題,執行之後如截圖顯示叉叉。
寫法有問題,編譯有錯誤
CREATEORREPLACEPROCEDUREp_test(bgnINVARCHAR2,--開始時間
edINVARCHAR2--結束時間
)IS
vsqlVARCHAR2(20000);
tnameVARCHAR2(20);--動態表名
begindateVARCHAR2(20);
enddateVARCHAR2(20);
BEGIN
tname:='動態表名固定部分';
vsql:='';
begindate:=bgn;
enddate:=ed;
WHILE(substr(begindate,1,7)<substr(enddate,1,7))LOOP
vsql:=vsql||'unionall'||chr(10)||
'selectsubstr(記賬時間,1,7),公司名稱,sum(金額)from'||tname||
substr(begindate,1,4)||substr(begindate,6,2)||
'whererptdate=(selectmax(記賬時間)from'||tname||
substr(begindate,1,4)||substr(begindate,6,2)||
')groupbysubstr(記賬時間,1,7),公司名稱'||chr(10);
begindate:=to_char(add_months(to_date(begindate,'yyyy-mm-dd'),1),
'yyyy-mm-dd');
ENDLOOP;
vsql:=vsql||'unionall'||chr(10)||
'selectsubstr(記賬時間,1,7),公司名稱,sum(金額)from'||tname||
substr(enddate,1,4)||substr(enddate,6,2)||
'whererptdate='''||enddate||
'''groupbysubstr(記賬時間,1,7),公司名稱'||chr(10);
vsql:=substr(vsql,12);
--dbms_output.put_line(vsql);
EXECUTEIMMEDIATE(vsql);
ENDp_test;
5. Oracle存儲過程,更新大量數據,如何循環分批次提交
可通過以下方法:
以100條數據為例,如果海量數據可參考。
如test表中有如下數據:
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;
6. oracle存儲過程問題
可能是這個存儲過程編譯沒成功。
create or replace procere proc_kaoqin
as
v_id int;
v_id1 int;
v_inprout varchar2(20);
v_inprout1 varchar2(20);
begin
v_id:=1;
loop
exit when (v_id+1)>(select max(id) from kaoqin_temp);
v_id1:=v_id+1;
select in_or_out into v_inprout from kaoqin_temp where id=v_id;
select in_or_out into v_inprout1 from kaoqin_temp where id=v_id1;
if v_inprout=v_inprout1 then
delete from kaoqin_temp where door='部門門' and id in(v_id,v_id1);
end if;
vid:=vid+1;
end loop;
end proc_kaoqin;
重新編譯再試一下。
7. oracle存儲過程中如何對一個變數累加賦值 最好有個例子
1、首先打開oracle資料庫,如下圖所示。

8. 執行oracle存儲過程的時候,提示在①那個地方報命令未正確結束
select * from B where city_code =upp; //這句話有什麼用?貌似沒有用到么
insertintoBvalues((=(=addCode)),------------------①
oracle裡面沒有這種語法,有兩種方式你可以嘗試
select xxx into 到變數里。如select xxx into A,然後insert into B values(A);
select xxx from xxx。如:
insert into B
select (select a from A),(select b from A) from al;
9. oracle存儲過程怎麼寫循環
寫循環的操作方法和步驟如下:
1、第一步,編寫存儲過程的整體結構,然後定義變數,見下圖。

10. oracle存儲過程如何輸出信息
可用DBMS_OUTPUT.PUT_LINE()對存儲過程的進行輸出。
編寫存儲過程:
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('輸出SQL語句1');
elsif M < 3 then
dbms_output.put_line('輸出SQL語句2');
else
dbms_output.put_line('nothing');
end if;
end;

(10)oracle存儲過程while擴展閱讀;
存儲在資料庫的數據字典中,存儲在當前的應用中安全性由資料庫提供安全保證,必須通過授權才能使用存儲子程序,安全性靠應用程序來保證,如果能執行應用程序,就能執行該子程序。模式描述IN參數用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。
