Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决
http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html
(2014-04-02 04:06:28)
分类: oracle-基础 |
定义存储过程时,通过指定AUTHID 属性,定义DR
Procedure 和IR Procedure
procedure DEMO(ID in NUMBER) AUTHID DEFINER as
...
...
procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as
...
...
用存储过程创建数据表:
创建时注意必须添加authid current_user ,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常,
这个语句相当于赋权限。
As
v_sqlerrm VARCHAR2(4000) ;
v_temp_table varchar(30);
Begin
-- DELETE DUPLICATE DATA FROM table CAR.ZCXYXX_SZJSPX,KEEP THE LATEST ONE RECORD.
--CALL SP Proc_DISTINCT_ZCXYXX_SZJSPX('TEMP_ZCXYXX_SZJSPX')
v_temp_table:='TEMP_ZCXYXX_SZJSPX';
-- Call SP to delete duplicate records
Proc_DISTINCT_ZCXYXX_SZJSPX(v_temp_table);
MERGE INTO DRIVER_TRAIN_LOG Target USING
(
SELECT DISTINCT
DRIVER_NO ,--学员流水号
ID_NO ,--身份证明号码
TRAIN_CAR_CLASS --申请车型(准驾车型
FROM ZCXYXX_SZJSPX
) Source
ON
(
Source.DRIVER_NO = Target.DRIVER_NO -- AND
-- Source.TRAIN_CAR_CLASS = Target.TRAIN_CAR_CLASS
)
WHEN MATCHED THEN UPDATE SET
Target.ID_NO = Source.ID_NO ;
--Target.TRAIN_CAR_CLASS = Source.TRAIN_CAR_CLASS ;
COMMIT; --1
/* UPDATE TRAIN_CAR_CLASS */
MERGE INTO ZCXYXX_SZJSPX Target USING
(
SELECT DISTINCT
ID_NO ,--身份证明号码
TRAIN_CAR_CLASS --申请车型(准驾车型
FROM DRIVER_TRAIN_LOG
) Source
ON
(
Source.ID_NO = Target.ID_NO
)
WHEN MATCHED THEN UPDATE SET
Target.TRAIN_CAR_CLASS = Source.TRAIN_CAR_CLASS ;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
v_sqlerrm := sqlcode|| SQLERRM|| '存储过程[Proc_Update_ID_NO]执行失败!';
RAISE_APPLICATION_ERROR(-20003,v_sqlerrm);
ROLLBACK;
v_OUT := v_sqlerrm ;
End Proc_Update_ID_NO;
/*********************************
名称:Proc_DISTINCT_ZCXYXX_SZJSPX
功能描述:创建临时数据存储表
修订记录:
版本号 编辑时间 编辑人 修改描述
1.0.0 2015-9-20 ** 1.创建此存储过程
1.0.1 2015-9-21 ** 2.修改表名称及变量名称,增加必要注释
存储过程执行权限问题: AUTHID CURRENT_USER
入参出参描述:
IN_TABLE_NAME 要创建的临时表名
**********************************/
v_tablename varchar2(30);--表名
v_flag number(10,0);
v_sqlfalg varchar(200);
v_create_sql varchar(4000);
begin
v_flag:=0;
v_tablename:=UPPER(IN_TABLE_NAME);
v_sqlfalg:='select count(*) from user_TABLES where table_name='''||v_tablename||'''';
v_create_sql:='CREATE TABLE '|| v_tablename ||' AS SELECT * from
( select DRIVER_NO,ID_NO,NAME,TRAIN_CAR_CLASS,ACCEPT_DATE,REGIST_STATUS,OPERATION, rec_update_date,MEMO,
row_number() over (partition BY ID_NO order by rec_update_date desc) RN from ZCXYXX_SZJSPX WHERE RN=1)' ;
-- dbms_output.put_line(v_create_sql);
execute immediate v_sqlfalg into v_flag;
if v_flag=0 then --如果没有这个表 则去创建
begin
-- DELETE DUPLICATE DATA FROM table CAR.ZCXYXX_SZJSPX,KEEP THE LATEST ONE RECORD.
execute immediate v_create_sql;
execute immediate 'DROP TABLE ZCXYXX_SZJSPX';
execute immediate 'ALTER TABLE TEMP_ZCXYXX_SZJSPX rename TO ZCXYXX_SZJSPX';
end;
else
execute immediate 'DROP TABLE TEMP_ZCXYXX_SZJSPX';
-- DELETE DUPLICATE DATA FROM table CAR.ZCXYXX_SZJSPX,KEEP THE LATEST ONE RECORD.
execute immediate v_create_sql;
execute immediate 'DROP TABLE ZCXYXX_SZJSPX';
execute immediate 'ALTER TABLE TEMP_ZCXYXX_SZJSPX rename TO ZCXYXX_SZJSPX';
end if;
EXCEPTION
WHEN OTHERS THEN
--dbms_output.put_line( SQLCODE|| ' :'|| SQLERRM);
RAISE_APPLICATION_ERROR(-20003,SQLCODE|| SQLERRM|| '存储过程[Proc_DISTINCT_ZCXYXX_SZJSPX]执行失败');
ROLLBACK;
end;
Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER的更多相关文章
- 在ORACLE存储过程中创建临时表
在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...
- MS SQL动态创建临时表
开发业务需求,需要对一个表作数据分析,由于数据量较大,而且分析时字段会随条件相应变化而变化. 因此计划先把数据转插入一个临时表,再对临时表的数据进行分析. 问题点是如何动态创建临时表.原先Insus. ...
- mysql 存储过程动态拼接sql并执行赋值
)) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT ...
- Oracle:如何创建一个只有查看权限的用户
因为工作中测试环境和开发环境是分开的,所以开发有时处理bug时需要连接测试数据库,这样出现一个问题是有些开发会为了验证某些问题任意改动数据库的表和字段,对测试库造成污染.为了能够让开发连接测试环境,同 ...
- Oracle 12c 用户创建、角色、权限
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAd4AAADHCAIAAAA4UqVzAAAgAElEQVR4nOy9Z5Bk13UmyN/6vZrlrG
- MYSQL中存储过程的创建,调用及语法
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
- MySql创建一个存储过程
MySQL 存储过程是从 MySQL 5.0 新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装. 特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 ...
- 关闭ES动态创建mapping
使用ES的默认配置会使我们在索引不存在于mapping中的字段时,会自动创建. 这无疑会给我们带来困扰. 在我们不想要某个字段被搜索的时候,我们可以在开始关闭动态创建mapping. 执行如下操作: ...
- linux下创建文件的文件权限问题
今天发现创建文件的权限和自己规定的权限不一致,了解到了权限掩码的问题,这里总结一下. 首先权限掩码umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常我们都 ...
随机推荐
- JQ入门学习实战演练
选择器是JQuery一大特色,所有的DOM操作.事件操作.Ajax操作都离不开选择器.熟练掌握JQuery的选择器,可以节省很多代码,很大程序上简化我们的脚本编程工作. JQuery的选择器很类似于样 ...
- 基础笔记3(二)(专门处理String的正则表达式)
1.常规判断一个字符串是以什么开头,是否是数字的判断方式有: a.通过比较每个字符,注意比较是字符值(ASc码值),不是字面值 String s="); //判断每个字符数组的每个字符 ch ...
- java归并排序,单线程vs多线程
一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ...
- Goppa code
上面的公式定义了长度为n的Goppa码[1].n=2^m, 其维度 k≥n- t·m. 最小距离d≥ 2t+1. 存在运行时间与 n·t 成正比的快速译码算法. 从形式上看,右边是分式,相当于线性分组 ...
- 解决JS加载速度慢
在网页中的js文件引用会很多,js引用通常为 <script src="xxxx.js"></script> 通过如下方法可以增加js加载速度 <sc ...
- svn 版本控制
首先来下载和搭建SVN服务器. Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html windows操作 ...
- Python之路 day3 全局变量、局部变量
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...
- Windows下搭建NodeJS绿色版开发环境
文章最初发布于szhshp的第三边境研究所, 转载请注明 开发背景 博客一直用的是Jekyll, 突然想玩玩NodeJS和Hexo, 于是就试着搭建一下 绿色环境, 基于Window8, 不需要管理员 ...
- 获取sql server数据库表结构
if exists (select 1 from sysobjects where name = 'sysproperties'and xtype = 'V')begin DROP VIEW s ...
- 05-String动手动脑问题及课后实验性问题总结
一.请运行以下实例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? (1)在Java中,内容相同的字符常量("Hello")只保存一 ...