【问题标题】:Execute SQL Stored procedure using Object_ID使用 Object_ID 执行 SQL 存储过程
【发布时间】:2018-11-25 12:06:03
【问题描述】:

有没有办法做到这一点?例如,假设存储过程 X 的 object_id 是 1234。我正在尝试做类似的事情

EXEC ('EXEC Object_Name(1234)')

它会运行存储过程 X。有没有办法做到这一点?

谢谢。

【问题讨论】:

  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...

标签: sql stored-procedures dynamic-sql


【解决方案1】:

我猜您使用的是 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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多