**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が返りますが、例外は発生しません。一意制約に反していたり、必須カラムが不足していたりする場合に例外が発生します。