Я хочу выполнить два запроса в сценарии. Oracle. Нужна помощь - PullRequest
1 голос
/ 13 января 2010

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

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

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

Спасибо заранее Ashish

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');

1 Ответ

1 голос
/ 13 января 2010

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

Обязательно передайте все параметры в верхнем регистре , поскольку 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...