2

Oracle DBからユーザーを削除するために、このようなことを試みました。

create or replace procedure skeleton1(inUser varchar) IS
begin
  set @str = concat('drop user ', "'",inUser,"'@","'localhost'");
  prepare stmt from @str;
  -- select @str;  
  execute IMMEDIATE stmt;
  deallocate prepare stmt;
end//
delimiter ;

しかし、複数のコンパイル エラーに直面しています。

誰か助けてくれませんか?

4

1 に答える 1

4

有効な Oracle 構文はほとんどありません。このような潜在的に破壊的なことをしようとする前に、PL/SQL のドキュメントを読み始めることをお勧めします。たぶん、ここから始めて、どこに行くか見てみましょう。

直接的な答えを出すのは少し気が進まないのですが、どこかでわかるでしょう。次のようなことができます:

create or replace procedure skeleton1(inUser varchar) IS
begin
  execute IMMEDIATE 'drop user ' || inUser);
end;
/

しかし、悪用されないようにするには、入力をサニタイズする必要があります。また、自分が何をしていて、どのような影響を与える可能性があるかを本当に理解する必要があります。一例として、ユーザーがオブジェクトを所有している場合、これは失敗します。

于 2012-04-26T09:04:05.723 に答える