一、dos下修改表数据需要commit
1.打开两个dos窗口,一个用sysdba登录,一个用hr用户登录
2.在sysdba 用户窗口中查询现在未提交的事务:select xid,xidusn from v$transaction; 如果存在数据有的修改事务没有commit;
3.测试、在hr窗口创建一个表添加数据后在sysdba窗口执行查询未提交的事务,可以看到有数据,在hr窗口提交后,再用sysdba查询;
二、Merge 的使用;
BEGIN
MERGE INTO COPY_EMP c
USING EMPLOYEES e
ON ( e.employee_id = c.employee_id )
WHEN MATCH THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name
WHEN NO MATCH THEN
INSERT VALUES ( e.first_name,e.last_name);
END;
三、SQL Cursor (游标)
1.分为隐式游标(implicit),显示游标(explicit)
2.通过可以查询更新了多少条记录 SQL%FOUND / SQL%NOTFOUND / SQL%ROWCOUNT
3例子:
create table emp as select * from employees;--创建一个emp表
DECLARE
V_ROWS_DELETED VARCHAR(30);
V_EMPNO EMP.EMPLOYEE_iD%TYPE := 176;
BEGIN
DELETE FROM EMP
WHERE EMPLOYEE_ID = V_EMPNO;
V_ROWS_DELETED := ( SQL%ROWCOUNT || 'ROW DELETED.');
DBMS_OUTPUT.PUT_LINE(V_ROWS_DELETED);
END;
5.rowcount 在commit之前获取;