2017-07-31 24 views
2

同じ問合せによって行われた更新の数に基づいて、表に値を挿入したいとします。where句内の内部問合せとしてのOracle UPDATE

私が試したクエリの例は次のとおりです。

SELECT column1 column2 
    FROM table_A 
WHERE (UPDATE table_B 
      SET column3= "?" 
     WHERE column3 = "?" 
     RETURN "UPDATED ROW COUNT") > 10 

これを実行する方法は他にも多数あります。しかし、私は明示的に、WHERE句内で更新を実行したいと思っています。これは、倫理的なハッキングのシナリオに使用されます。

答えて

1

んが、あなたはORA-14551: cannot perform a DML operation inside a query

原因を取得しません。

処置:問合せまたはPDMLスレーブの 内で、問題のあるDML操作が実行されていないか、または が自律型トランザクションを使用してDML操作を実行していることを確認してください。

+0

ありがとう。それは基本的に私が知りたかったことです。 :-) – HelpingHand

2

説明する方法はありません。図のように、暗黙的カーソル属性SQL%ROWCOUNTをPL/SQLブロックで使用できます。 INSERT、UPDATEなどのDML操作、削除、または選択-のために更新 クエリ内またはPDMLスレーブの下で実行することはできません。

DECLARE 
ct NUMBER(5); 
BEGIN 
    UPDATE table_B SET column3 = 20 WHERE column3 = 40; 
    ct := SQL%ROWCOUNT; 
    INSERT INTO table_A 
    SELECT 1 column1 , 2 column2 FROM DUAL CONNECT BY LEVEL <= ct; 
END; 
/
+0

ありがとうございました! ... where句の中で実行できる挿入クエリまたは更新クエリはありますか?上記のように、これはいくつかの倫理的なハッキングシーンのためのものです。私の友人のプログラムには、SQLに追加するためにビューからクエリを送信できるクエリがいくつかあります。悪用が可能かどうかを判断したいだけです。 – HelpingHand

+0

あなたはようこそ!私はあなたとあなたの友人両方の好奇心が好きでした。しかし私はそのような「倫理的な」慣行を知らない。私はただの愚かな普通の男です! –

+0

ハハ.. '\ - ( '|')_ /' ...深刻です。これはどんな種類の犯罪にも使用されることはありません。ただ顧客としてそれをチェックすることは、プログラムのセキュリティについて非常に興味があります。再度ありがとう.. – HelpingHand