关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼   分类: oracle-基础     今天晚上升级,有个存储过程死活编译不过去,提示权限不足,但是用户是具有dba权限的,网上一查才知道,oracle存储过程分两种,DR(Definer's Rights ) Procedure和IR(Invoker's Rights ) Procedure.…
在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表. CREATE OR REPLACE PROCEDURE temptest (p_searchDate IN DATE) IS v_count INT; str varch…
开发业务需求,需要对一个表作数据分析,由于数据量较大,而且分析时字段会随条件相应变化而变化. 因此计划先把数据转插入一个临时表,再对临时表的数据进行分析. 问题点是如何动态创建临时表.原先Insus.NET使用下面代码实现: 1 DECLARE @s NVARCHAR(MAX) = ' 2 IF OBJECT_ID(''[dbo].[#Tb]'') IS NOT NULL 3 DROP TABLE [dbo].[#Tb] 4 CREATE TABLE [dbo].[#Tb] 5 ( 6 [xxx…
)) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT SUM(',_xnb,') INTO @tnum FROM btc_user_coin'); ## 预处理需要执行的动态SQL,其中stmt是一个变量 PREPARE stmt FROM @strsql; ## 执行SQL语句 EXECUTE stmt; ## 释放掉预处理段 deallocate…
因为工作中测试环境和开发环境是分开的,所以开发有时处理bug时需要连接测试数据库,这样出现一个问题是有些开发会为了验证某些问题任意改动数据库的表和字段,对测试库造成污染.为了能够让开发连接测试环境,同时又不污染测试库,可以给其提供一个只有查看权限(视情况开放其他权限)的用户 1.首先登陆sys用户,创建一个账号,并赋予连接权限 ; grant connect to test_cx; 2.设置权限,使其能够查看base库的所有表 登陆base库,然后执行如下语句,得到针对base库所有表的授权语句…
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAd4AAADHCAIAAAA4UqVzAAAgAElEQVR4nOy9Z5Bk13UmyN/6vZrlrG…
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 第一部分:创建一个简单的无参的存储过程 1 用mysql客户端登入…
MySQL 存储过程是从 MySQL 5.0 新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装. 特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 PHP),要组织非常多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.如今有了 MySQL 存储过程,业务逻辑能够封装存储过程中,这样不仅easy维护,并且运行效率也高. 一.MySQL 创建存储过程  "pr_add" 是个简单的…
使用ES的默认配置会使我们在索引不存在于mapping中的字段时,会自动创建. 这无疑会给我们带来困扰. 在我们不想要某个字段被搜索的时候,我们可以在开始关闭动态创建mapping. 执行如下操作: PUT /test_xzy/_mapping/data { "dynamic":false } 然后查看mapping: GET /test_xzy/_mappings/data 得到: { "test_xzy": { "mappings": { &…
今天发现创建文件的权限和自己规定的权限不一致,了解到了权限掩码的问题,这里总结一下. 首先权限掩码umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常我们都只用到后面3个,第一个是特殊的权限位,暂时没有很了解.比如chmod 0777 file 就代表给file设置属主.组内用户.其他用户分别是rwx.rwx.rwx的权限. 在我的ubuntu15.04下,umask默认是0002,可以用umask指令查看,加上参数-S会更加易懂: 掩码,顾名思义,是…
由于用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程,实际上,oracle给我们提供了在存储过程中使用role权限的方法:修改存储过程,加入Authid Current_User时存储过程可以使用role权限. 下面以例子说明: ----执行存储过程p_create_emp2报下面的错误: SQL> exec p_create_emp2; beg…
没有AUTHID CURRENT_USER表示定义者权限(definer rights),以定义者身份执行: 加上AUTHID CURRENT_USER表示调用者权限(invoker rights),以调用者身份执行. 例: 1. 创建两个用户:xxpo,xxgl 2. 在xxpo下创建一张表:xxpo_authid_test CREATE TABLE xxpo.xxpo_authid_test(ID NUMBER,NAME VARCHAR2(20)); 3. 在xxpo下创建如下两个proce…
oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题 学习了:http://blog.csdn.net/royzhang7/article/details/51172413 --解决 1.可以显示的赋给用户 create table权限 grant create table to user; 2.可以在存储过程上使用调用者权限. CREATE OR REPLACE PROCEDURE test_proc (a NUMBER, b VARCHAR…
此示例的主要目的主要是为了了解在PL/SQL环境下怎么创建和执行存储过程. 存储过程所涉及的DataTable: 第一步:创建游标变量 游标是ORACLE系统在内存中开辟的一个工作区,主要用来存储SELECT的数据的.通俗的讲就是用来存储查询数据的一个临时的变量. 游标的创建: CREATE OR REPLACE PACKAGE pkg_query AS TYPE cur_query IS REF CURSOR; END pkg_query; 第二步:存储过程的创建 create or repl…
这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下   oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,…
一.在oracle项目开发中越到问题: 在利用ODP向oracle中插入数据时,如果这样写:   insert into clobTable (id, story) values(1,'....'); 其中story为clob类型   如果story的长度大于2000字节,直接插入将出现 ORA-01704:文字字符串过长 的错误. 解决方案:       方案一.利用参数   insert into clobTable (id, story) values(1,:story);   Oracl…
简介: 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行. 自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功, 存储过程并不能像函数那样被直接调用,只能利用 execute 来执行存储过程. 优点: 1.提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过…
Oracle动态sql在存储过程中出现表或视图不存在的解决方法 CREATE OR REPLACE PROCEDURE P_test is strsql varchar2(2000); BEGIN   --导入用户数据数据 strsql := 'insert into tabuser (usercode) select us.tabuser.usercode from us.tabuser' execute immediate strsql;  EXCEPTIONwhen others   th…
动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的. 任务 传入参数:新建的表名hd+当前的年和月,例如hd_201105表结构是:字段1:id ,类型是number,可以自动增加 字段2:name 类型是varcha2,长度20 字段3:city 类型是varchar2,长度20 建立序列: create sequence t_id increment start nomaxvalue cache ; 建立自动建表过程: create or replace proce…
一.Oracle临时表知识 在Oracle中,临时表分为SESSION.TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION:而 TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除 TRANACTION临时表数据. 1) 会话级临时表 示例 1创建 create global temporary table temp_tbl(col_a varchar2(30…
创建一个存储过程,动态添加100张track表表名track_0 ~~ track_99注:sql的拼接只能用 CONCAT()函数 -- 创建一个存储过程 CREATE PROCEDURE create_track_table() begin declare num int; -- 定义一个循环变量 ; -- 循环 100 遍 do SET @table_name=CONCAT('track_',num); -- 定义表名(变量定义表名) -- 拼接字符串需要用 concat()函数 -- 定…
Oracle通用分页存储过程的创建与使用 1.创建Oracle包的定义.使用 REF CURSOR 数据类型来处理 Oracle 结果集.REF CURSOR 是一个指向 PL/SQL 查询所返回的结果集的指针.与普通的游标不同,REF CURSOR 是一个变量,它是对游标的引用,可以在执行时将其设置为指向不同的结果集.使用 REF CURSOR 输出参数可以将 Oracle 结构化程序的结果集传递回调用应用程序.通过在调用应用程序中定义 OracleType.Cursor 数据类型的输出参数,…
问题叙述: 用 EXECUTE IMMEDIATE 动态往临时表插入数据,跟踪发现插入临时表后数据会立马清空,按理说等存储过程执行完才会清空临时表才对,现在是执行插入语句后下一步验证就发现临时表就没有数据了,不知道什么原因,以前系统用着都是好的,这两天突然就不行,请大神指导. 下面是存储过程代码:v_sqlstr := v_sqlstr || v_condtion;          EXECUTE IMMEDIATE 'insert into wms_temp_meter_assign( me…
一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样的多个表,我们能够逐个建立,也能够採用循环的方法来建立.与之相相应的,能够用一个存储过程实现对全部表的操作.也能够循环建立存储过程,每一个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表.每一个表中包括员工工号(8位)和年龄字段,以工号的最后一位来分表.同一时候,我们建立存储过程实…
--创建表 create table TESTWP ( ID ), C_DATE DATE ); select * from TESTWP; --2.创建一个sequence create sequence WP_SEQ minvalue maxvalue start increment cache ; --3.创建一个存储过程 create or replace procedure prc_wp_test is begin insert into testwp values(WP_SEQ.ne…
创建该存储过程时,不会出错,但是执行存储过程时,会报出下面这样的错误 这是因为在存储过程创建时,它先做语法检查,如果通过了语法检查,它会尝试解析它包含的对象名,如果存在也会解析该对象引用的对象是否存在.如果引用的对象名不存在,解析会在存储过程首次执行时触发.即在首次执行存储过程时,查询处理器从 sys.sql_modules 目录视图中读取该存储过程的文本,并检查该过程所使用的对象名称是否存在.这一过程称为延迟名称解析,因为存储过程引用的表对象不需要在创建该存储过程时就存在,而只需在执行该存储过…
创建JOB定时执行存储过程有两种方式 方式1:通过plsql手动配置job,如下图: 方式2:通过sql语句,如下sql declare job_OpAutoDta pls_integer;--声明一个jobid begin sys.dbms_job.submit( job=>job_OpAutoDta, what => 'pk_sys_department(1);pk_sysward();',--多个存储过程通过“;”隔空 next_date => to_date('22-03-201…
修改存储过程,在存储过程名称后面添加 Authid Current_User 后执行通过. CREATE OR REPLACE PROCEDURE p_test Authid Current_User IS BEGIN EXECUTE Immediate 'create table test01 as (select * from dual)'; END p_test;…
一.动态执行SQL PREPARE S1 FROM 'delete from test'; EXECUTE S1; 二.使用游标 DECLARE V_CURSOR CURSOR FOR SELECT DELETESQL,INSERTSQL FROM FJDC.V_I_DG_DM_ZY_WL_ZBHZ_ATTR T; OPEN V_CURSOR; FETCH V_CURSOR INTO V_DELETESQL,V_INSERTSQL; CLOSE V_CURSOR; 三.WHILE循环 WHILE…
1. 安装: 百度一下你就知道 2. sqlplus登录/sqlplus命令登录 在安装Oracle时,你需要记住设置的“全局数据库名”(默认为orcl) 和 口令,在以两种方式登录时: 用户名: sys(超级用户==sysdba) / system(管理员用户 和sys想比区别在于system不能创建表空间)... 口 令:注意这里不仅仅要输入你设置的口令,在后面还要加上as sysdba   如:orcl as sysdba 3. 创建临时表空间/表空间/创建用户/授权 代码如下: 1:创建…