oracle儲存過程插入一條資料執行之後資料不能插入

2022-03-09 10:55:18 字數 3092 閱讀 1547

1樓:匿名使用者

這種情況屬於插入資料後,沒有提交(commit),導致表被鎖,所以需要進行提交(commit)或者回滾(rollback)操作。

如果當前session已關閉,可通過如下方法殺掉程序。

1、生成kill session語句

select 'alter system kill session ''' || sid ||',' || serial# || ''';' from

(select distinct a.sid, a.serial#, status, machine, lockwait, logon_time

from v$session a, v$locked_object b

where (a.status = 'active' or a.status = 'inactive')

and a.sid = b.session_id

and b.oracle_username='xyhistest'--加上使用者名稱是避免把其他系統的會話也關閉,以免傷及無辜

2、批量執行第一步生成的語句

alter system kill session 'sid,serial#';

2樓:一個小鹹魚

你那段sql是往tab_name 表裡查資料,test1表當然沒資料了

oracle 儲存過程 如何實現插入資料時出錯後,但還繼續執行 5

3樓:匿名使用者

begin

insert …… ;--可能出錯的地方

exception

when others then

null;--出錯後跳到這裡來。

end;

將可能出錯語句包裹起來,抓異常,不影響往下執行。

4樓:滿地圖找牙

一個sql文肯定實現不了這個功能,你可以分成三個sql執行,然後用exception捕捉異常。

sql server裡處理也一樣。

5樓:路下雨葉湘倫

用處理異常的方法就可以了啊

oracle 的儲存過程中 動態的建立一張表 然後插入一個變數到這個表中,表能動態的建立但是變數不能插入進去

6樓:

估計是缺少引號的緣故。v_name是varchar2的吧。

改成 execute immediate ' insert into addtopinfo values('||sysdate||',『『'||v_name||'』』)'; 試試,就是v_name變數在語句裡要有引號 。拼接字串時每兩個「'」 會被解析成為一個「'」

7樓:

即使不加引號也可以插入的 最多oracle會做個隱式轉換,這不會有問題 而且v_name本身就是char型別,根本不能存在轉換問題

我有個疑問p_addstaffnum 這個是樓主幹什麼用的?

至於報錯的問題樓主少了分號和commit才是關鍵!

8樓:我又強力了

過程裡面建表 需要commit後才能插入吧

9樓:

1、execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')'; v_name 既然是變數 怎麼可能會用' '括號起來;

就算是 直接執行 的話 也是 execute immediate ' insert into addtopinfo values(sysdate,v_name);

2、如果有v_name的話 ,我建議你一般用拼sql的方式來執行

例如 如下格式(這個是我自己的procedure擷取的,可以參考下)

v_createsql := ' create table ' ||vv_owner||'.'|| vv_name_temp ||

' as select * from ' || iv_name || ' where 1=0';

execute immediate v_createsql;

3、下次報錯,請把你的出錯情況提出來。我們怎麼知道什麼錯呢?

10樓:學習先知道

create table 表名 as select * from 表

在儲存過程裡面加 execute immediate

oracle 用儲存過程向表插入資料的問題 200

11樓:匿名使用者

實際上儲存過程向表中插入資料和sql執行的區別是不大的,只不過是儲存過程是用loop等迴圈插入,之後順序執行sql語句,不用命令列執行。

create or replace procedure insert_data_4_pressure_3

is--result1  varchar2(50);

var_num number;

begin

var_num:=1;

while

var_num< 1000000

loop

insert into rp_trans_log_day

(trans_time,

trans_province,

trans_type,

score_range,

rule_name,

trans_num)

select to_date('2013/10/29', 'yyyy-mm-dd'),

round(dbms_random.value(1, 300)) || '省',

round(dbms_random.value(1, 800)) || '型別',

round(dbms_random.value(1, 100)) || '風險分值',

round(dbms_random.value(1, 300)) || '規則名稱',

'1'from dual;

commit;

var_num:=var_num+1;

end loop;

end insert_data_4_pressure_3;

oracle資料庫刪除表中一條資料sql語句

sql delete from 資料庫.表名 where id 1 講解 如果不用跨庫,可以省略 資料庫 1代表唯一的一條記錄,是引數。delete from 表名 where 條件 mit 提交 保留表,只刪除資料 truncate table mytable 或者 delete from myt...

mysql查詢,某條記錄變化前最後一條資料和變化後的第一條資料,應該怎麼寫

不明白你需要的查詢結果是什麼,請舉例說明 mysql怎麼查詢一條記錄的前一條記錄和後一條記錄 上一條 select from 表 where 資料id 當前顯示資料id order by 資料 id asc limit 1 下一條 select from 表 where 資料id 當前顯示資料id ...

mysql如何只更新其中一條資料

select from student where o 比方說我要查詢 o 為空的就 寫一個where o 單引號中間要打一個空格鍵專 修改也一 樣,屬update zi set title 1 where title 單引號中間要打一個空格鍵 注意,資料庫中只識別單引號,不識別雙引號 update...