Oracle中过程里加动态sql的问题
我建了一个过程,然后我想在这个过程中往一张表中插入一行数据,但是这张表需要创建自动增长列,我们知道在oracle中无法像sqlserver那样设一个自动增长列,所以我就想...
我建了一个过程,然后我想在这个过程中往一张表中插入一行数据,但是这张表需要创建自动增长列,我们知道在oracle中无法像sqlserver那样设一个自动增长列,所以我就想到用序列,但是过程中不能直接用create的DML语句,于是我用动态sql建立一个序列,我们知道动态sql在编译时不执行,只有在执行阶段才真正创建对象,所以当我在下面的语句中引用这个序列时系统提示此序列名不存在,这正常,因为他只是编译而真正的对象还没建立,所以我将使用这个序列的insert语句也加上execute immediate 以标识这也是一个动态sql,这样改后语句编译可以通过了,但是当我执行这个过程时奇怪的事情发生了,语句执行到创建序列时,系统提示我没有权限。。
为什么??请高手指教!!
没人知道?? 展开
为什么??请高手指教!!
没人知道?? 展开
展开全部
你需要有对目的表的INSERT和UPDATE权限,以及对源表的SELECT权限。
Oracle中实现自动增长列另一种方法
--在users表的userid列上实现自动增长列
--需要同时使用序列和行级触发器
create sequence seq_userid; --创建序列
create or replace trigger users_bir --创建行级触发器
before insert on users
for each row
declare
tempnum number;
begin
select seq_userid.nextval into tempnum from dual;
:new userid := 'Usr' || lpda(tempnum,7,'0');
end users_bir ;
/
Oracle中实现自动增长列另一种方法
--在users表的userid列上实现自动增长列
--需要同时使用序列和行级触发器
create sequence seq_userid; --创建序列
create or replace trigger users_bir --创建行级触发器
before insert on users
for each row
declare
tempnum number;
begin
select seq_userid.nextval into tempnum from dual;
:new userid := 'Usr' || lpda(tempnum,7,'0');
end users_bir ;
/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询