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

fixed_date , 赋权技巧 ,procedure执行方式, PL/SQL注意的地方的更多相关文章

  1. SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化

    SQL性能优化:http://www.cnblogs.com/CareySon/category/360333.html Select count(*)和Count(1)的区别和执行方式 在SQL S ...

  2. oracle PL/SQL(procedure language/SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...

  3. SQLPLUS执行PL/SQL语句块

    1.首先登录Oracle HR schema: 2.对于PL/SQL程序,分号表示语句的结束:而使用 "."  号表示整个语句块的结束,也可以省略.按回车键后,该语句块不会执行,即 ...

  4. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  5. pl/sql的介绍

    为什么需要pl/sql编程? 因为使用纯的sql语句来操作数据库,有先天性的技术缺陷: 1.不能模块编程: 2.执行速度慢: 3.安全性有问题: 4.浪费带宽. pl/sql是什么? pl/sql(p ...

  6. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  7. PL/SQL 训练12--动态sql和绑定变量

    --什么是动态SQL?动态PL/SQL--动态SQL是指在运行时刻才构建执行的SQL语句--动态PL/SQL是指整个PL/SQL代码块都是动态构建,然后再编译执行 --动态SQL来可以用来干什么? - ...

  8. Oracle之PL/SQL编程

    PL/SQL(Procedural Language/SQL,过程语言/SQL) 是结合了Oracel过程语言和结构化查询语言(SQL)的一种扩展语言. 优点: (1)PL/SQL具有编程语言的特点, ...

  9. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

随机推荐

  1. [jzoj NOIP2018模拟10.23]

    丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...

  2. IT架构师介绍-软件架构设计学习第一天(非原创)

    文章大纲 一.架构师定义二.架构师分类与具备能力三.研发人员发展的技术路线四.架构师知识体系五.参考文章   一.架构师定义   什么是架构师,这个聊架构话题时永恒的问题.每个公司对架构师的定位也有所 ...

  3. $P2121 拆地毯$

    \(problem\) \(kruskal\)的模板题. #ifdef Dubug #endif #include <bits/stdc++.h> using namespace std; ...

  4. 动态规划DP入门

    百度百科↓ 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman ...

  5. Django 内容回顾

    模板 变量 {{ }} 标签 {% %} if elif else for empty forloop() with...as csrf_token 过滤器 default length add da ...

  6. yield from (python生成器)

    #生成器中的yield from是干什么用的(一般多用于线程,协程那)def func(): # for i in 'AB': # yield i yield from 'AB' # 就相当于上面的f ...

  7. Nginx一个实现负载均衡的强大web server

    <转>nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个 ...

  8. mysql视图的操作

    一.创建视图的语法形式 CREATE VIEW view_name AS 查询语句 ; 使用视图 SELECT * FROM view_name ; 二.创建各种视图 1.封装实现查询常量语句的视图, ...

  9. android黑科技系列——解析公众号文章消息和链接文章消息自动打开原理

    一.辅助功能方案分析 关于WX的各种功能插件已经非常普遍了,而现在的插件都是依赖于Xposed框架进行的,所以个人觉得WX应该在这方便应对Xposed框架的使用防护,防止插件满天飞的现象,本文来介绍一 ...

  10. html中设置浏览器解码方式

    通过添加一行标签: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"& ...