我想在脚本中运行两个查询。甲骨文。需要帮忙

时间:2010-01-13 10:26:35

标签: oracle

我有两个查询,一个是创建过程查询,另一个是对同一过程的调用。

它们在单独运行时都运行正常,但是当我尝试一起运行它们时我会得到错误:就像执行警告一样,结果不合适。

你可以告诉我怎样才能实现这个目标?也许它必须使用执行立即执行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');

1 个答案:

答案 0 :(得分:1)

我尝试了这个程序并且有效。

确保传递所有参数大写,因为ALL_CONSTRAINTS将它们保持为大写,因此在您的示例中为CALL dp_drop_fkey_proc('SOMEOWNERNAME', 'TABLENAME', 'CONSTRAINTNAME');
。 / p>

如果这没有帮助,请提供您收到的错误。

修改

你这样做的方式总是两步:

  1. 创建程序
  2. 运行它
  3. 编译过程后,您可以使用不同的参数反复运行它。

    如果您想通过一个电话进行,唯一有意义的方法是拨打电话

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

    <强> EDIT2

    也许我不明白你想做什么。您可以尝试在/之后的行中添加斜杠字符END;吗?

    -- [...]
    END;
    /
    
    CALL DP_DROP_FKEY_PROC('SomeOwnerName', 'TableName', 'ConstraintName');