我有两个查询,一个是创建过程查询,另一个是对同一过程的调用。
它们在单独运行时都运行正常,但是当我尝试一起运行它们时我会得到错误:就像执行警告一样,结果不合适。
你可以告诉我怎样才能实现这个目标?也许它必须使用执行立即执行soem,但我是新手,所以不知道如何将我的第一个查询转换为执行立即执行。提前致谢 阿希什
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 :(得分:1)
我尝试了这个程序并且有效。
确保传递所有参数大写,因为ALL_CONSTRAINTS
将它们保持为大写,因此在您的示例中为CALL dp_drop_fkey_proc('SOMEOWNERNAME', 'TABLENAME', 'CONSTRAINTNAME');
。 / p>
如果这没有帮助,请提供您收到的错误。
修改强>:
你这样做的方式总是两步:
编译过程后,您可以使用不同的参数反复运行它。
如果您想通过一个电话进行,唯一有意义的方法是拨打电话
ALTER TABLE "SOMEOWNERNAME"."TABLENAME" DROP CONSTRAINT "CONSTRAINTNAME"
<强> EDIT2 强>:
也许我不明白你想做什么。您可以尝试在/
之后的行中添加斜杠字符END;
吗?
-- [...]
END;
/
CALL DP_DROP_FKEY_PROC('SomeOwnerName', 'TableName', 'ConstraintName');