有一个存储过程,在这个存储过程里面,首先会去读一个表,这个表的一个字段(proname)存储的是一些存储过程的名称,然后循环这个表,根据这个字段(proname)的名称,动态去调用这些存储过程,参数都是一样的。请问如何实现。试过用execute immediate(proname || '(参数)'),但是报了这样一个错:View program sources of error stack;
请高手指点。
请高手指点。
解决方案 »
- 触发器中如何取消插入操作
- 求一个select语句条件
- 请教这条SQL如何写成存储过程(PL/SQL)
- 跪求oracle9.2 的 patch 2428356 补丁用于oracle 的com+支持。[email protected]
- oracle9i用Database configuration assistant建了一个数据库,我应该怎么近到这个数据库里去呢?
- 请问如何删除一个名称为关键字的列
- 愿这分儿啊伴着窗外飘飞的雪花给大家带去新年的祝福与收获!~
- oracle Intelligent Agent 在linux上启动不了
- 如何设置缺省数据库?
- 分区表怎么查询比不分区还要慢?
- ORA-00911 invalid character
- 如何查找两个数据库user/role的表权限有不一样的
或者
execute immediate(begin ' || proname || '(参数)' || ' end;')
v_tmpcomment :=
'begin '
|| instidlist (i_instloop).instprolink
|| '('''
|| v_taskid
|| ''','''
|| deviceidlist (i_deviceloop)
|| ''','''
|| instidlist (i_instloop).instid
|| ''','''
|| instidlist (i_instloop).resultid
|| ''', '''
|| v_tmpresult
|| ''','''
|| v_tmpcomment
|| '''); end;';
v_tmpcomment :=
'begin '
|| instidlist (i_instloop).instprolink
|| '('''
|| v_taskid
|| ''','''
|| deviceidlist (i_deviceloop)
|| ''','''
|| instidlist (i_instloop).instid
|| ''','''
|| instidlist (i_instloop).resultid
|| ''', '''
|| v_tmpresult
|| ''','''
|| v_tmpcomment
|| '''); end;';
之后还是不行,另外,最后两个参数: v_tmpresult,v_tmpcomment是需要在子存储过程里面负值后返回的
v_sqlstring := 'call ' || procname || '(:pram1, :parm2, :parm3, :parm4, :parm5, :parm6)';
execute immediate v_sqlstring using v_taskid, deviceidlist (i_deviceloop), instidlist (i_instloop).instid, instidlist (i_instloop).resultid, out v_tmpresult, out v_tmpcomment;换成这样试试
v_sqlstring := 'call ' || procname || '(:pram1, :parm2, :parm3, :parm4, :parm5, :parm6)';
execute immediate v_sqlstring using v_taskid, deviceidlist (i_deviceloop), instidlist (i_instloop).instid, instidlist (i_instloop).resultid, out v_tmpresult, out v_tmpcomment;终于解决,非常感谢!