• 学习Oracle遇到的实际问题(持续更新)


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

    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:Usersdingqi>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:以执行过程的用户的权限来处理涉及的对象权限. 

  • 相关阅读:
    找出互联网符合的产品实例
    以软件周期来说明不同的测试的使用情况
    scrapy多个page爬取, post请求, 通过爬到的URL继续发请求爬页面
    Scrapy 安装, 基础使用, 持久化存储
    Linux nginx+uWSGI+django+virtualenv+supervisor发布web服务器
    Linux Nginx
    Linux virtualenv, virtualenvwrapper, pip freeze
    Linux Python安装
    Redis, Python操作Redis, Linux操作Redis, Redis命令, Redis发布订阅, Redis持久化, Redis主从同步
    爬虫 selenium
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3321986.html
Copyright © 2020-2023  润新知