Есть ли способ добиться этого? Например, предположим, что object_id для хранимой процедуры X - 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.
Надеюсь, это поможет.
Какой СУБД вы используете? «SQL» - это просто язык запросов, а не имя конкретного продукта базы данных. Добавьте тег для продукта базы данных, который вы используете
postgresql,oracle,db2,sql-server, ...