多くのプリコンパイラ・アプリケーションでは、処理中の文のテキスト、その長さ、指定されているSQLコマンド(INSERTやSELECTなど)を把握すると役に立ちます。これは、動的SQLを使用するアプリケーションについて特に当てはまります。
SQLStmtGetText()
関数(旧称はsqlgls()
関数)は、SQLLIBランタイム・ライブラリの一部であり、次の情報を戻します。
最後に解析されたSQL文のテキスト
文の有効な長さ
文で使用されているSQLコマンドの関数コード
SQLStmtGetText()
はスレッド・セーフです。静的SQL文を発行した後にSQLStmtGetText()
関数をコールすることができます。動的SQL方法1のときは、SQL文が実行された後にSQLStmtGetText()
をコールします。動的SQL方法2、3および4のときは、文がPREPAREするとすぐにSQLStmtGetText()
をコールすることができます。
すべてのSQLLIB関数の新しい名前については、SQLLIBパブリック関数の新しい名前を参照してください。
SQLStmtGetText()
のプロトタイプは、次のとおりです。
void SQLStmtGetText(dvoid *context, char *sqlstm, size_t *stmlen, size_t *sqlfc);
コンテキスト・パラメータはランタイム・コンテキストです。コンテキストの定義と使用方法は、コンテキスト変数を参照してください。
sqlstmパラメータは文字バッファです。このバッファには、SQL文の戻されたテキストが格納されます。プログラムでは、静的にバッファを宣言するか、動的にバッファのメモリーを割り当てる必要があります。
stmlenパラメータはsize_t変数です。SQLStmtGetText()
をコールする前に、このパラメータにsqlstmバッファの実際のサイズをバイト単位で設定してください。SQLStmtGetText()
が戻ると、sqlstmバッファにはSQL文テキストが入り、その後はバッファ長まで空白文字で埋められます。stmlenパラメータは、戻された文の実際のバイト数を戻します。埋め込まれた空白文字のバイト数は含まれません。 stmlenの最大値はポート固有で、通常は最大整数サイズになります。
sqlfcパラメータは、文のSQLコマンドのSQL機能コードを戻すsize_t変数です。表9-3は、各コマンドのSQL機能コードを示しています。
表9-3 SQL機能コード
コード | SQL機能 | コード | SQL機能 | コード | SQL機能 |
---|---|---|---|---|---|
01 |
CREATE TABLE |
26 |
ALTER TABLE |
51 |
DROP TABLESPACE |
02 |
SET ROLE |
27 |
EXPLAIN |
52 |
ALTER SESSION |
03 |
INSERT |
28 |
GRANT |
53 |
ALTER USER |
04 |
SELECT |
29 |
REVOKE |
54 |
COMMIT |
05 |
UPDATE |
30 |
CREATE SYNONYM |
55 |
ROLLBACK |
06 |
DROP ROLE |
31 |
DROP SYNONYM |
56 |
SAVEPOINT |
07 |
DROP VIEW |
32 |
ALTER SYSTEM SWITCH LOG |
57 |
CREATE CONTROL FILE |
08 |
DROP TABLE |
33 |
SET TRANSACTION |
58 |
ALTER TRACING |
09 |
DELETE |
34 |
PL/SQL EXECUTE |
59 |
CREATE TRIGGER |
10 |
CREATE VIEW |
35 |
LOCK TABLE |
60 |
ALTER TRIGGER |
11 |
DROP USER |
36 |
(使用されていません) |
61 |
DROP TRIGGER |
12 |
CREATE ROLE |
37 |
RENAME |
62 |
ANALYZE TABLE |
13 |
CREATE SEQUENCE |
38 |
COMMENT |
63 |
ANALYZE INDEX |
14 |
ALTER SEQUENCE |
39 |
AUDIT |
64 |
ANALYZE CLUSTER |
15 |
(使用されていません) |
40 |
NOAUDIT |
65 |
CREATE PROFILE |
16 |
DROP SEQUENCE |
41 |
ALTER INDEX |
66 |
DROP PROFILE |
17 |
CREATE SCHEMA |
42 |
CREATE EXTERNAL DATABASE |
67 |
ALTER PROFILE |
18 |
CREATE CLUSTER |
43 |
DROP EXTERNAL DATABASE |
68 |
DROP PROCEDURE |
19 |
CREATE USER |
44 |
CREATE DATABASE |
69 |
(使用されていません) |
20 |
CREATE INDEX |
45 |
ALTER DATABASE |
70 |
ALTER RESOURCE COST |
21 |
DROP INDEX |
46 |
CREATE ROLLBACK SEGMENT |
71 |
CREATE SNAPSHOT LOG |
22 |
DROP CLUSTER |
47 |
ALTER ROLLBACK SEGMENT |
72 |
ALTER SNAPSHOT LOG |
23 |
VALIDATE INDEX |
48 |
DROP ROLLBACK SEGMENT |
73 |
DROP SNAPSHOT LOG |
24 |
CREATE PROCEDURE |
49 |
CREATE TABLESPACE |
74 |
CREATE SNAPSHOT |
25 |
ALTER PROCEDURE |
50 |
ALTER TABLESPACE |
75 |
ALTER SNAPSHOT |
-- |
-- |
-- |
-- |
76 |
DROP SNAPSHOT |
エラーが発生すると、長さパラメータ(stmlen)はゼロを戻します。発生する可能性のあるエラー条件は、次のとおりです。
SQL文が解析されていません。
無効なパラメータ(たとえば、負の長さのパラメータ)を渡しました。
SQLLIBで内部例外が発生しました。
SQLStmtGetText()
は、次のコマンドを含む文のテキストは戻しません。
CONNECT
COMMIT
ROLLBACK
FETCH
これらのコマンドのSQL機能コードはありません。