**TOracleQuery**は、以下の種類のSQLを実行可能です。単独のSQLに限らず、BEGIN~ENDで囲まれた任意のPL/SQLブロックを実行できます。

  • DML(SELECT/INSERT/UPDATE/DELETE文)
  • DDL(Data Definition Language) = CREATE TABLE/ALTER TABLE/DROP TABLE/GRANT ROLE など
  • トランザクション/セッション/システム制御コマンド = COMMIT/ ROLLBACK/ SAVEPOINT/ ALTER SESSION/
    SET ROLE/ ALTER SYSTEMなど

SELECT文以外のDMLの場合は、結果セットが返らないため、Fieldなどのメソッドは使用できません。

例1:UPDATE文を実行する場合 :

  //OracleQuery1.SQL = 
  // UPDATE EMP
  // SET SAL = 1000
  // WHERE EMPNO = 7499

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    with OracleQuery1 do
    try
      Execute;
      showmessage(IntToStr(RowsProcessed) + ' rows affected. ');
    except
      on E: EOracleError do showmesage(E.Message);
    end;
  end;

  * TOracleQuery
    * function **RowsProcessed** : 更新SQLで更新されたレコード数を返します 

RowsProcessedは文字通りに解釈すると「処理されたレコード数」で、
SELECT文の場合にはサーバからFetchしたレコード数の累計になります。検索結果が大量にあるときは、最初にクエリを開いた時点で、RowsProcessedの値はReadBufferに等しく、Nextでレコードの読み込みを続けるとReadBufferの倍数で増加して、最終的にはヒットした件数に一致して止まります。

例外処理

UPDATE/DELETEの対象が(WHERE句の条件などにより)ゼロ件だった場合、RowsProcessed=0が返りますが、例外は発生しません。一意制約に反していたり、必須カラムが不足していたりする場合に例外が発生します。