重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
insert之后需要commit
创新互联是一家集网站建设,临澧企业网站建设,临澧品牌网站建设,网站定制,临澧网站建设报价,网络营销,网络优化,临澧网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
或者你将工具设为自动提交,如果没有设为自动提交,oracle只在内存区保留,关闭oracle后,当然就丢失了。
commit之后,oracle会写入磁盘,之后再查就不会丢了。
另外,提醒一句,因为oracle是并行多任务的,如果你执行了insert、update之类的语句,不做提交的话,很容易造成锁表,给其他人带来影响。
oracle
存储过程的基本语法
1.基本结构
CREATE
OR
REPLACE
PROCEDURE
存储过程名字
(
参数1
IN
NUMBER,
参数2
IN
NUMBER
)
IS
变量1
INTEGER
:=0;
变量2
DATE;
BEGIN
END
存储过程名字
2.SELECT
INTO
STATEMENT
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)
例子:
BEGIN
SELECT
col1,col2
into
变量1,变量2
FROM
typestruct
where
xxx;
EXCEPTION
WHEN
NO_DATA_FOUND
THEN
xxxx;
END;
...
3.IF
判断
IF
V_TEST=1
THEN
BEGIN
do
something
END;
END
IF;
4.while
循环
WHILE
V_TEST=1
LOOP
BEGIN
XXXX
END;
END
LOOP;
5.变量赋值
V_TEST
:=
123;
6.用for
in
使用cursor
...
IS
CURSOR
cur
IS
SELECT
*
FROM
xxx;
BEGIN
FOR
cur_result
in
cur
LOOP
BEGIN
V_SUM
:=cur_result.列名1+cur_result.列名2
END;
END
LOOP;
END;
7.带参数的cursor
CURSOR
C_USER(C_ID
NUMBER)
IS
SELECT
NAME
FROM
USER
WHERE
TYPEID=C_ID;
OPEN
C_USER(变量值);
LOOP
FETCH
C_USER
INTO
V_NAME;
EXIT
FETCH
C_USER%NOTFOUND;
do
something
END
LOOP;
CLOSE
C_USER;
8.用pl/sql
developer
debug
连接数据库后建立一个Test
WINDOW
在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试
sqlplus 中直接敲入存储过程代码(create or replace procedure ...), / 结束,
如果代码没有错误,该过程就被保存到数据库中。
可以用 exec 过程名 运行。
如果是plsql developer之类的工具,那更简单,编辑完存储过程后,有运行按钮,点击即可。
oracle中执行了insert、update、delete这三个DML语句后,结果在未提交前实际上是保存在undo空间内,只有提交之后,才会真正写入到表中。所以会发生你的问题。
提交语句:commit
另外,在未做提交前,其他人是无法select到你处理的数据的,看到的是未处理前的数据。
还有一点要说明,当你执行了update、delete时,语句所影响的数据会被oracle自动锁定,其他人只能查,而不能update或delete,如果执行update或delete,那么就会产生数据库锁。而锁一旦产生,对系统的影响会很大,因此应尽快提交。