sql - 使用 Object_ID 执行 SQL 存储过程
问题描述
有没有办法做到这一点?例如,假设存储过程 X 的 object_id 是 1234。我正在尝试做类似的事情
EXEC ('EXEC Object_Name(1234)')
它会运行存储过程 X。有没有办法做到这一点?
谢谢。
解决方案
我猜你使用Oracle db。要使用已知 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
。
希望有帮助。
推荐阅读
- reactjs - 反应原生如何在底栏上绘制曲线
- java - 无法自动装配 javamailSender
- swift - 无法将图像从 url 加载到 Swift 中的 UICollectionViewCell
- c++ - 构造后更改指针的地址
- python-3.x - Python 随机 BPF
- sass - 如何在 sass 中正确显示我的项目网格?我的图像没有形成 3 行网格
- java - 使用 Java 标准功能拦截整个类
- typescript - 如何转换
> 进入TaskEither 在 fp-ts - c# - 试图在数据网格列中显示数据库中的图像异常“找不到组件”
- sql - DBMS 中基于投票的审批系统