数据库当前用户授予了connect、resource
权限,在
存储过程里面执行execute immediate 'create table XX'时会报“
权限不足”的错误。此时觉得很奇怪,resource角色是具有create table的
权限的,为什么在
存储过程里面创建表就
权限不足了。
查了资料,原因为:用户拥有的角色role在
存储过程里面不可用。 一般有如下两种解决方法:
Oracle存储过程执行权限
默认情况下,在调用存储过程用户的角色是不起作用的,即在执行存储过程时只有Public权限。所以如果被调用的存储过程中如果有executeimmediate 'create table..'语句,将会引发ORA-01031:insufficient privileges错误。
存储过程分为两种,即DR(Definer'sRights ) Procedur...
Oracle使用EXECUTE IMMEDIATE命令动态执行SQL语句
动态执行SQL语句指先把一个SQL命令保存到一个字符串中,然后通过execute immediate命令动态执行字符串中的SQL语句,以实现SQL语句的动态生成。
一、动态SQL语句的使用方式
DECLARE
字符串变量名 varchar2(n); --定义一个字符串类型的变量,用以保存SQL语句
BE...
Oracle变量的定义和使用
Oracle提供了三种定义变量的方式,分别为:使用define定义HOST变量,使用Variable定义绑定变量,在代码块的declare中定义变量。
一、使用define定义HOST变量
使用define定义host变量时须指定变量名和变量的值,如果变量名已存在于host变量中,则自动覆盖。定义host变量时不能指定类型,一律按char存储。DEFINE变量只在当前...
Oracle代码块(1)——匿名代码块
Oracle的流程控制语句必须在代码块中执行。代码块分为两种:命名块和匿名块。
匿名代码块:以DECLARE或BEGIN开始,每次提交都被编译。匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用。
命名代码块:包括存储过程、函数、包和触发器。命名代码块可以在数据库中存储并在适当的时候调用。
一、定义Oracle匿名代码块
在代码...
Oracle Sqlplus 设置数据显示的行数、行宽等
在使用 Oracle Sqlplus 对数据库进行操作时,通过设置数据显示的行数、行宽以及某些列的显示宽度,可以使数据的显示更加美观。
一、设置页面显示的行数(pagesize)
1、查看 pagesize 的当前值
SQL> show pagesize
pagesize 100
2、设置页面显示的行数并查看效果
SQL> set pagesize 8;
SQL> select empno,ename,job,sal from e
[oracle@CentOS-Oracle database]$ ./runInstaller -ignorePrereq -silent -responseFile /tmp/oracle/database/response/db_install.rsp
正在启动 Oracle Universal Installer...
检查临时空间: 必须大于 120 MB。 实际为 24804 MB...
Oracle逻辑备份与恢复(exp | imp)命令详解
逻辑备份是指从数据库中导出数据并写入一个输出文件。逻辑备份只能用来对数据库进行逻辑恢复,即数据导入,而不能按数据库原来的存储特征进行物理恢复。逻辑备份可以使用exp命令来完成,逻辑导入可以使用imp命令来完成。exp和imp命令的用法如下:
一、使用exp命令进行数据备份
该命令的常用参数如下:
1、USERID:指定用户名和口令,格式为:...
在调用Oracle存储过程时,经常会遇到一些错误。以下是一些常见的错误和解决方法:
1. ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'PROCEDURE_NAME'
这个错误通常是由于传递的参数类型或数量与存储过程定义不匹配引起的。请检查你的参数是否与存储过程定义中的参数相匹配。
2. ORA-04068: existing state of packages has been discarded
这个错误通常是由于在执行存储过程之前,先执行了某些DDL语句,导致存储过程的状态被丢弃。请确保在执行存储过程之前不要执行任何DDL语句。
3. ORA-06508: PL/SQL: could not find program unit being called
这个错误通常是由于存储过程不存在或者没有正确授权给调用者。请确保存储过程存在,并且调用者有执行该存储过程的权限。
如果你使用Mybatis调用Oracle存储过程时出现错误,也可以按照上述方法进行排查。同时,你还需要确保Mybatis的配置文件中正确配置了存储过程的参数和返回值。