有三个用户参与这个事情:

system用户,拥有表manager。

sys create了一个用户item,并赋予权限:

SQL> GRANT SELECT ON SYSTEM.MANAGER TO ITEM;

SQL> GRANT INSERT ON SYSTEM.MANAGER TO ITEM;

这时 sys用户进行的操作:

SQL> set transaction name 'INSERT INTO TABLE manager';

事务处理集。

SQL> insert into system.manager
2 values (15,'AA','seter','2200');

已创建 1 行。

已用时间: 00: 00: 00.00
SQL> select name from v$transaction;

NAME
----------------------------------------------------------------------------------------------------

INSERT INTO TABLE manager

已选择2行。

已用时间: 00: 00: 00.01

此时在 item 用户窗口可以查看到数据的更新:

SQL> select * from system.manager;

MGRNO MNAME JOB REMARK
---------- ------------------------------ ------------------------------ -------------
12 Smith manager 3600
13 Paul coder 3000
15 AA seter 2200
14 Daisy tester 2000

已选择4行。

但是 在item 用户窗口进行操作:

SQL> insert into system.manager
2 values ( 16,'BB','bb','2000')
3 /

已创建 1 行。

SQL> select * from system.manager;

MGRNO MNAME JOB REMARK
---------- ------------------------------ ------------------------------ --------------
12 Smith manager 3600
13 Paul coder 3000
15 AA seter 2200
14 Daisy tester 2000
16 BB bb 2000

已选择5行。

而在sys窗口进行查询的时候却看不到item用户对manager表的操作结果。这是为什么呢? 为什么呢 ?

SQL> select * from system.manager;

MGRNO MNAME JOB
---------- ------------------------------ ------------------------
REMARK
------------------------------------------------------------------
12 Smith manager
3600

13 Paul coder
3000

15 AA seter
2200

我再用system用户连接数据库查看表manager发现数据确实改变了的:

C:\Users\dingqi>sqlplus system@dabook

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 9月 15 00:05:56

Copyright (c) 1982, 2010, Oracle. All rights reserved.

输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Produ
With the Partitioning, OLAP, Data Mining and Real Application Tes

SQL> SET PAGESIZE 25
SQL> SET TIMING ON
SQL> SET FEEDBACK ON
SQL> select * from manager;

MGRNO MNAME JOB
---------- ------------------------------ -----------------------
REMARK
-----------------------------------------------------------------
12 Smith manager
3600

13 Paul coder
3000

15 AA seter
2200

14 Daisy tester
2000

16 BB bb
2000

已选择5行。

 

原因: 在item窗口进行DML 语句的操作 需要显式提交 COMMIT;因为ORACLE会隐式的提交DDL语句。

DDL语句包括:

      create  alter drop 模式对象及其他数据库结构(包括数据库本身及数据库用户)

      rename数据库对象

      删除所有的数据 (truncate)

      管理权限(grant revoke)

      设置审计(audit noaudit)

      添加注释(COMMENT)到数据字典

DML语句包括:

      从表或视图中检索数据(select)

      往表或视图中插入数据(insert)

      修改列的值(update)

      有条件的往表或试图中插入或更新数据(merge)

      从表或视图中删除数据(delete)

      查看SQL语句的执行计划(explain plan)

      锁住表及用户

哈哈 小误会。不过亲身体会的感觉还是很爽的。。

问题2: system 创建procedure,execute的时候却提示权限不足,真是气死我了!

SQL> CREATE OR REPLACE PROCEDURE p_create_view
2 is
3 sql_string varchar2(500);
4 BEGIN
5 sql_string :='CREATE view v_zero3 as SELECT * FROM s
6 EXECUTE IMMEDIATE sql_string;
7 END;
8 /

过程已创建。

已用时间: 00: 00: 00.27
SQL> execute p_create_view;
BEGIN p_create_view; END;

*
第 1 行出现错误:
ORA-01031: 权限不足
ORA-06512: 在 "SYSTEM.P_CREATE_VIEW", line 6
ORA-06512: 在 line 1

解决办法:在create procedure的时候加上一句authid current_user 解决。

CREATE OR REPLACE PROCEDURE p_create_view
authid current_user is
sql_string varchar2(500);
BEGIN
sql_string :='CREATE view v_zero3 as SELECT * FROM system.manager';
EXECUTE IMMEDIATE sql_string;
END;

Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限.

学习Oracle遇到的实际问题(持续更新)的更多相关文章

  1. C++入职学习篇--代码规范(持续更新)

    C++入职学习篇--代码规范(持续更新) 一.头文件规范 在头文件中大家一般会定义宏.引入库函数.声明.定义全局变量等,在设计时最后进行分类,代码示范(自己瞎琢磨的,请多多指点): #ifndef T ...

  2. java 学习必备的软件,持续更新中

    小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...

  3. 资源| 学习视频库-永久有效,持续更新!附赠java面试汇总

    每天进步一丢丢,连接梦与想 我们总是羡慕他人的光芒,却忘记自己也会发光 声明 资源来自于网络,小编只是资源的搬运工,若有侵权,联系小编即删. 期待已久的学习视频库来啦! 经过小编多日整理,整理了1.5 ...

  4. oracle 常用操作记录--持续更新...

    一.oracle grant 授权语句(转自:https://www.cnblogs.com/yt954437595/p/6488819.html) --select * from dba_users ...

  5. Oracle常用命令(持续更新)

    --1.解锁用户 alter user 用户名 account unlock; --2.开启最小补充日志记录(执行的DML操作会被记录下来)  alter database add supplemen ...

  6. Oracle自用脚本(持续更新)

    --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...

  7. 【Android XMPP】 学习资料收集贴(持续更新)

    系列一: 基于xmpp openfire smack开发之openfire介绍和部署[1] 基于xmpp openfire smack开发之smack类库介绍和使用[2] 基于xmpp openfir ...

  8. 【Python灰帽子--黑客与逆向工程师的Python编程之道】我的学习笔记,过程.(持续更新HOT)

    我的学习笔记---python灰帽子 世界让我遍体鳞伤,但伤口长出的却是翅膀. -------------------------------------------- 前言 本书是由知名安全机构Im ...

  9. JVM学习--内存分配策略(持续更新)

    一.前言 最近学习<深入java虚拟机>,目前看到内存分配策略这块.本文将进行一些实践. 二.内存分配策略 1.大对象直接进入老年代 书中提到了: 下面进行测试,代码如下: public ...

随机推荐

  1. loadRunner12 设置关联 获取服务端动态数据

    关联:服务器返回给客户端一些动态变化的值,客户端用这些值去访问服务器,不能把这些值写死在脚本里面,而应该存放在一个变量里面. 在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关 ...

  2. PTA 7-3 Windows消息队列 (25分)

    PTA 7-3 Windows消息队列 (25分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列 ...

  3. 关于React采坑(憨批)系列---类组件(class MyCom extends React.Component--VM47:9 Uncaught TypeError: Super expression must either be null or a function, not undefined)

    今天在学习React中的类组件时,突然给我报错VM47:9 Uncaught TypeError: Super expression must either be null or a function ...

  4. Springboot+Mybatisplus替换mybatis整合报错Mapped Statements collection does not contain value

    问题一: mybatisPlus完全兼容mybatis,一般来说直接替换掉就可以了,如果mybatis的数据源不能取消创建的话,就注掉mybatisplus的数据源 //@Configurationp ...

  5. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  6. Go语言核心36讲(Go语言实战与应用六)--学习笔记

    28 | 条件变量sync.Cond (下) 问题 1:条件变量的Wait方法做了什么? 在了解了条件变量的使用方式之后,你可能会有这么几个疑问. 1.为什么先要锁定条件变量基于的互斥锁,才能调用它的 ...

  7. [hdu6984]Tree Planting

    构造一个01矩阵,其中格子$(i,j)$​​​​​对应于第$ik+j$​​个​​​的位置(其中$0\le i<\lceil\frac{n}{k}\rceil,0\le j<k$​​​,位置 ...

  8. [gym102769L]Lost Temple

    考虑第$i$列的答案,即找到一个区间$[l,r]$,使得: 1.$l$和$r$要同奇偶,令$ans=\frac{r-l}{2}$,要求尽量大($ans+1$即为该列答案) 2.$\forall 0\l ...

  9. 从零开始学Kotlin第三课

    kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...

  10. 比对软件Blast,Blast+,Diamond比较

    1. Blast (1)格式化数据库 formatdb -i db.seq -p T -o T -l logfile 主要参数: -i 输入需要格式化的源数据库名称 -p 文件类型,是核苷酸序列数据库 ...