有没有办法实现这个目标?例如,假设存储过程X的object_id是1234.我正在尝试做类似的事情
EXEC ('EXEC Object_Name(1234)')
它会运行存储过程X.有没有办法实现这个目标?
感谢。
答案 0 :(得分:0)
我猜您使用的是Oracle数据库。
要使用已知的object_id运行过程,您可以使用字典视图all_objects
并构建调用。
这是一个例子:
declare
iObjectId number := 3927531;
sProcedureName varchar2(128);
sProcedureOwner varchar2(128);
begin
-- get the procedure name
for c in (
select object_name procedure_name,
owner procedure_owner
from all_objects
where object_type = 'PROCEDURE'
and object_id = iObjectId
) loop
sProcedureName := c.procedure_name;
sProcedureOwner := c.procedure_owner;
end loop;
if sProcedureName is not null then
execute immediate 'begin '||sProcedureOwner||'.'||sProcedureName||'; end;';
dbms_output.put_line('Procedure '||sProcedureName||' was executed successfully.');
else
dbms_output.put_line('Procedure was not found for object_id = '||iObjectId||'.');
end if;
end;
请记住,程序可以包含所需的参数。在这种情况下,您可以使用字典视图all_arguments
。
希望有所帮助。