zoukankan      html  css  js  c++  java
  • fixed_date , 赋权技巧 ,procedure执行方式, PL/SQL注意的地方

    本文讨论4个知识点,

    1. fixed_date参数

    2. 赋权技巧

    3. procedure执行的方式

    4. PL/SQL中要注意的几个地方

    fixed_date参数

    客户想修改oracle的 系统时间做测试,但oracle的默认系统时间是读取其所在server的系统时间的,所以不能随便修改。不过可以修改fixed_date参数,该参数的作用就是让sysdate在oracle中返回指定的值,便于测试。 命令如下:

    设置时间

    alter system set fixed_date='2014-06-20-14:23:33';

    取消设置

    alter system set fixed_date=none;

    赋权技巧

    这个命令需要alter system权限,所以如果想让普通用户执行这个命令就要赋权 alter system 给普通用户,这样赋权不对,所以我们用如下方式赋权

    首先创建一个procedure

    create or replace procedure set_fixed_time( v_time dba_objects.OBJECT_NAME%TYPE)
    as
    begin
        execute immediate 'alter system set fixed_date='||chr(39)||v_time||chr(39) ;
    end;
    /

    然后让普通用户具有该procedure的执行权限以及同义词

    SQL> create synonym myuser.set_fixed_time for set_fixed_time;
    
    Synonym created.
    
    SQL> grant execute on set_fixed_time to myuser;
    
    Grant succeeded.

    这样普通用户就可以设置时间了。

    procedure执行的方式

    这里要注意的几点是,普通用户 myuser 并没有alter system的权限,但是可以正常运行procedure set_fixed_time 这是因为procedure在执行的时候使用的是其定义者的权限。

    PL/SQL中要注意的几个地方

    PL/SQL代码有很多奇怪的规范,当然也可能是这些规范有特定的意义。这里列举出来,如果不知道,在写PL/SQL的时候会很头疼。

    create or replace procedure set_fixed_time( v_time dba_objects.OBJECT_NAME%TYPE)
    as
    begin
        execute immediate 'alter system set fixed_date='||chr(39)||v_time||chr(39) ;
    end;
    /

    这段代码中 v_time 的类型定义必须用表名.列名%TYPE的形式,如果你用varchar2(800)这种直接的类型,则会出错。

    PL/SQL代码中执行SQL语句必须用 execute immediate sql_statement. sql_statement有如下几点要求。

    1. 必须用''括起来

    2. 正常的SQL_STATEMENT可能是带有;的 但是在这个''里面不能加;

  • 相关阅读:
    堆栈之链表实现
    队列之数组实现
    堆栈之数组实现
    线性表之循环双链表
    GMAP 集合已修改;可能无法执行枚举操作 错误【正解】(原创)
    大智慧选股公式
    获取股票实时交易数据的方法
    GMAP谷歌地图的纠偏 保密算法
    GMAP 判断一个坐标点是否在不规则多边形内部的算法
    SQL快速操作技巧2_datatable批量更新到数据表
  • 原文地址:https://www.cnblogs.com/kramer/p/3796805.html
Copyright © 2011-2022 走看看