2014-11-22 6 views
0

Я создал следующий пакет с 3-х процедур:Вызов процедуры Oracle в пакете из другой схемы?

CREATE OR REPLACE PACKAGE PQ_PaqueteIntegrantes 
AS 
PROCEDURE INTEG_INSERCIONES(paIdIntegrante IN CreadorTablas.INTEGRANTES.ID_INTEGRANTE%TYPE 
          ,paNombre IN CreadorTablas.INTEGRANTES.NOMBRE%TYPE 
          ,paApellidoPaterno IN CreadorTablas.INTEGRANTES.APELLIDO_PATERNO%TYPE); 

PROCEDURE INTEG_MODIFICACIONES(paIdIntegrante IN OUT CreadorTablas.INTEGRANTES.ID_INTEGRANTE%TYPE 
           ,paNombre IN OUT CreadorTablas.INTEGRANTES.NOMBRE%TYPE 
         ,paApellidoPaterno IN OUT CreadorTablas.INTEGRANTES.APELLIDO_PATERNO%TYPE); 

PROCEDURE INTEG_ELIMINCACIONES( 
       paIdIntegrante IN OE.EJEMPLO_TRANSAC_CLASE.CUSTOMER_ID%TYPE 
           ,paMjeDescError OUT VARCHAR2 
           ,paCodeError OUT NUMBER);    
END PQ_PaqueteIntegrantes; 

Я создал эти процедуры с пользователем под названием Admin_proyectos. Первые процедуры делают «Вставки», второй - «Обновления», а последний «Удаляет», все они работают над таблицей Integrantes, эта таблица поступает от другого пользователя под названием CreadorTablas. Мое намерение состоит в том, чтобы создать другого пользователя под названием Admin, который будет нести ответственность за выполнение этих действий, используя процедуры из этого пакета, конечно. Я попытался сделать блок PL/SQL, но он не сработал ни с EXEC.

ответ

2
GRANT EXECUTE ON ADMIN_PROYECTOS.PQ_PaqueteIntegrantes TO Admin 

Затем вы можете вызвать процедуры, описанные в этом пакете с Admin пользователя, как

BEGIN 
ADMIN_PROYECTOS.PQ_PaqueteIntegrantes.INTEG_INSERCIONES(paIdIntegrante, paNombre, paNombre); 
END; 
0

Вы можете использовать выполнить немедленное заявление:

l_sql_stmt := 'alter table ' || p_table_name || ' drop partition ' || i.PARTITION_NAME || ';'; 
      dbms_output.put_line(l_sql_stmt); 
      execute immediate l_sql_stmt; 
Смежные вопросы