2010-01-13 2 views
1

У меня есть следующие два запроса: один - запрос процедуры создания, а другой - вызов той же процедуры.Я хочу запустить два запроса в скрипте. Oracle. Нужна помощь

они оба работают нормально при запуске индивидуально, но когда я пытаюсь запустить их вместе за один раз, я получаю ошибки: как выполненные с предупреждениями, и результаты не соответствуют этому.

не могли бы вы рассказать мне, как я могу достичь этого? может быть, он должен сделать это с помощью немедленного выполнения, но я новичок в этом, поэтому не знаю, как преобразовать свой первый запрос, который будет выполнен с немедленным выполнением.

Заранее спасибо Ашиша

CREATE or replace PROCEDURE DP_DROP_FKEY_PROC (NS IN varchar2, 
NM IN varchar2, FK IN varchar2) 
IS 
    S VARCHAR2(150) := ''; 
    I NUMBER; 
BEGIN 
    I := 0; 
    SELECT COUNT(*) INTO I FROM ALL_CONSTRAINTS C 
    WHERE (C.OWNER = NS) AND (C.TABLE_NAME = NM) AND (C.CONSTRAINT_NAME = FK) ; 
    IF (I = 1) THEN 
    S := 'ALTER TABLE "' || NS || '"."' || NM || '" DROP CONSTRAINT "' || FK || '"'; 
    EXECUTE IMMEDIATE S; 
    END IF; 
END; 


CALL DP_DROP_FKEY_PROC('SomeOwnerName', 'TableName', 'ConstraintName'); 
+0

Как выполнить второй запрос «индивидуально», если он вызывает процедуру? Какая у вас ошибка? –

+0

i сначала выполните первый запрос, который создаст процедуру, а затем я выполню второй запрос, который вызовет процедуру, и он работал нормально в два этапа. но я хочу выполнить оба запроса за один раз. , когда я делаю это, я получаю следующую ошибку: Предупреждение: исполнение завершено с предупреждением ПРОЦЕДУРА DP_DROP_FKEY_PROC Скомпилировано. – Ashish

+0

Предупреждение: выполнение завершено с предупреждением ПРОЦЕДУРА DP_DROP_FKEY_PROC Скомпилировано. – Ashish

ответ

1

Я попробовал процедуру, и она работала.

Убедитесь передать все параметры прописные, как ALL_CONSTRAINTS держит их в верхнем регистре, так что бы
CALL dp_drop_fkey_proc('SOMEOWNERNAME', 'TABLENAME', 'CONSTRAINTNAME');
в вашем примере.

Если это не поможет, предоставьте ошибку, которую вы получите.

EDIT:

, как вы это сделать, это всегда будет два шага:

  1. Создать процедуру
  2. Выполнить это

Как только процедура компилируется , вы можете запускать его снова и снова с различными параметрами.

Если вы хотите, чтобы это сделать один звонок, единственным способом, который имеет смысл, чтобы позвонить

ALTER TABLE "SOMEOWNERNAME"."TABLENAME" DROP CONSTRAINT "CONSTRAINTNAME" 

EDIT2:

Может быть, я не понял, что вы хотели сделать. Можете ли вы попытаться добавить косую черту / в строку после вашего END;?

-- [...] 
END; 
/

CALL DP_DROP_FKEY_PROC('SomeOwnerName', 'TableName', 'ConstraintName'); 
+0

Спасибо EDIT2: работал на меня. Это было то, что я искал между двумя заявлениями. Спасибо – Ashish

Смежные вопросы