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可能是带有;的 但是在这个''里面不能加;

  • 相关阅读:
    Ant Design Charts更改tooltip样式的方法
    css更改滚动条样式
    css实现多行文本设置省略号
    css-背景图置于背景色的下方
    js使用reduce实现扁平化数组转换为树形数据
    js实现从0到指定数据的跳动
    原生js模拟vue的响应式
    柯里化函数
    vue中keepalived的使用
    常用网址
  • 原文地址:https://www.cnblogs.com/kramer/p/3796805.html
Copyright © 2011-2022 走看看