create or replace procedure pro_temp2
(
GWOID in number, --岗位OID
GZOID in number --规则OID
)
as
v_KPIName varchar2(500); --KPI名称
v_PersonnelOID number(12); --员工OID
v_PersonnelName varchar2(500); --员工姓名
v_sql varchar2(1000); --动态sql
v_SqlLength integer; --sql长度
type mycursor is ref cursor; --循环游标
Info mycursor;
begin
v_sql := 'select (select bzjc from zh_khgz where oid=zh_jxkhgzmx.KPIOID) as gzmc from zh_jxkhgzmx where zboid='||GZOID;
open Info for v_sql;
v_sql := 'CREATE GLOBAL TEMPORARY TABLE T_TEMP2 (员工OID number(12),员工姓名 varchar2(50),';
fetch Info into v_KPIName;
while Info % found
loop
v_sql := v_sql || v_KPIName || ' varchar2(50), ';
fetch Info into v_KPIName;
end loop;
close Info;
v_SqlLength := length(v_sql);
v_sql := substr(v_sql,0,v_SqlLength - 2);
v_sql := v_sql || ') ON COMMIT delete ROWS';
execute immediate(v_sql);
v_sql := 'select oid,name from zh_ryda where zh_gwoid='||GWOID;
open Info for v_sql;
fetch Info into v_PersonnelOID,v_PersonnelName;
while Info % found
loop
fetch Info into v_PersonnelOID,v_PersonnelName;
execute immediate 'insert into T_TEMP2 values('''||v_PersonnelOID||''','''||v_PersonnelName||''')';
end loop;
close Info;
open Info for 'select * from T_TEMP2';
end pro_temp2;
上面的存储过程可以编译通过,但是在测试的时候,每当运行到
execute immediate(v_sql);时就提示权限不足,请问这个需要哪种权限?
(
GWOID in number, --岗位OID
GZOID in number --规则OID
)
as
v_KPIName varchar2(500); --KPI名称
v_PersonnelOID number(12); --员工OID
v_PersonnelName varchar2(500); --员工姓名
v_sql varchar2(1000); --动态sql
v_SqlLength integer; --sql长度
type mycursor is ref cursor; --循环游标
Info mycursor;
begin
v_sql := 'select (select bzjc from zh_khgz where oid=zh_jxkhgzmx.KPIOID) as gzmc from zh_jxkhgzmx where zboid='||GZOID;
open Info for v_sql;
v_sql := 'CREATE GLOBAL TEMPORARY TABLE T_TEMP2 (员工OID number(12),员工姓名 varchar2(50),';
fetch Info into v_KPIName;
while Info % found
loop
v_sql := v_sql || v_KPIName || ' varchar2(50), ';
fetch Info into v_KPIName;
end loop;
close Info;
v_SqlLength := length(v_sql);
v_sql := substr(v_sql,0,v_SqlLength - 2);
v_sql := v_sql || ') ON COMMIT delete ROWS';
execute immediate(v_sql);
v_sql := 'select oid,name from zh_ryda where zh_gwoid='||GWOID;
open Info for v_sql;
fetch Info into v_PersonnelOID,v_PersonnelName;
while Info % found
loop
fetch Info into v_PersonnelOID,v_PersonnelName;
execute immediate 'insert into T_TEMP2 values('''||v_PersonnelOID||''','''||v_PersonnelName||''')';
end loop;
close Info;
open Info for 'select * from T_TEMP2';
end pro_temp2;
上面的存储过程可以编译通过,但是在测试的时候,每当运行到
execute immediate(v_sql);时就提示权限不足,请问这个需要哪种权限?
解决方案 »
- REGEXP_SUBSTR 给我解释一下谢谢
- 如何通过互联网访问ORACLE数据库? 不在一个网段内,服务器在北京,客户端在广州
- 请问如何在oracle 声明一个存放变量的类
- 请教达人 一个大数据量的删除的时间问题
- 关于建表的问题,
- 关于视图查询的问题,在线等。。。。。
- oracle 11g安装失败,Oracle Database Configuration Assistant 失败
- 启动 lsnrctl,大约一分钟后,8080断口被占,怎么停止?
- 急问:如何求得存放在数据库的时间和SUSDATE之间的差值?(在线等待)!
- ORA-01406: fetched column value was truncated
- 急救!一个oracle 的存储过程问题 ————在线等
- VC里面如何调用ORACLE的存储过程还有触发器?
grant create any table to username;
create or replace procedure pro_temp3
(
GWOID in number, --岗位OID
GZOID in number --规则OID
)
as
v_KPIName varchar2(500); --KPI名称
v_PersonnelOID number(12); --员工OID
v_PersonnelName varchar2(500); --员工姓名
v_Exist integer; --判断是否存在
v_sql varchar2(1000); --动态sql
v_SqlLength integer; --sql长度
type mycursor is ref cursor; --循环游标
Info mycursor;
begin
v_Exist := 0;
select count(*) into v_Exist from USER_TAB_COLUMNS where lower(TABLE_NAME)='t_performance';
if v_Exist >= 1 then
v_sql := 'drop table t_performance';
execute immediate v_sql;
end if;
v_sql := 'CREATE TABLE t_performance(员工OID number(12),员工姓名 varchar2(50))';
execute immediate v_sql;
end pro_temp3;
我测试上面的存储过程,当 t_performance表存在时,可以drop掉这个表,但是我执行到下面的
v_sql := 'CREATE TABLE t_performance(员工OID number(12),员工姓名 varchar2(50))';
execute immediate v_sql;
的时候却提示权限不足,为什么这个用户可以drop表而不能新建表了?