Выполнить хранимую процедуру SQL с помощью Object_ID

Есть ли способ добиться этого? Например, предположим, что object_id для хранимой процедуры X - 1234. Я пытаюсь сделать что-то вроде

EXEC ('EXEC Object_Name(1234)')

и он будет запускать хранимую процедуру X. Есть ли способ сделать это?

Спасибо.

Какой СУБД вы используете? «SQL» - это просто язык запросов, а не имя конкретного продукта базы данных. Добавьте тег для продукта базы данных, который вы используете postgresql, oracle, db2, sql-server, ...

a_horse_with_no_name 15.06.2018 20:37
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
115
1

Ответы 1

Думаю, вы работаете с 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.

Надеюсь, это поможет.

Другие вопросы по теме