ttIsqlでの変数の使用、宣言および設定
ttIsqlでバインド変数を宣言、設定および使用できます。
バインド変数の宣言および設定
ttIsqlで、SQL文、SQLスクリプトまたはPL/SQLブロックから参照可能な変数および配列を宣言および構成できます。
variable
およびsetvariable
コマンドを使用して宣言した変数は、NUMBER
、CHAR
、NCHAR
、VARCHAR2
、NVARCHAR2
、CLOB
、NCLOB
、BLOB
、REFCURSOR
のデータ型の1つである必要があります。ただし、配列のバインド時には、TimesTenでは、NUMBER
、CHAR
、NCHAR
、VARCHAR2
またはNVARCHAR2
データ型の配列のバインドのみがサポートされています。
ノート:
宣言したすべての変数は、ttIsqlのセッションの間存続します。ただし、同じ名前の新しい変数を宣言すると、新しい変数が古い変数に置き換えられます。
次の例では、数値、文字列、配列のバインド変数をvariable
またはvar
コマンドで宣言しています。それぞれは、宣言時またはsetvariable
またはsetvar
コマンドを使用して、値に割り当てられます。
ノート:
Oracle TimesTen In-Memory DatabaseリファレンスのttIsqlを参照してください。
Command> VARIABLE house_number NUMBER := 268; Command> PRINT house_number; HOUSE_NUMBER : 268 Command> VARIABLE street_name VARCHAR2(15); Command> SETVARIABLE street_name := 'Oracle Parkway'; Command> VARIABLE occupants[5] VARCHAR2(15); Command> SETVARIABLE occupants[1] := 'Pat'; Command> SETVARIABLE occupants[2] := 'Terry'; Command> PRINT occupants; OCCUPANTS : ARRAY [ 5 ] (Current Size 2) OCCUPANTS[1] : Pat OCCUPANTS[2] : Terry
次に、配列に複数の値をバインドする例を示します(大カッコは値の記述用に使用し、カンマは配列内の各値を区切るために使用します)。
Command> VARIABLE occupants[5] VARCHAR2(15) := ['Pat', 'Terry']; Command> PRINT occupants; OCCUPANTS : ARRAY [ 5 ] (Current Size 2) OCCUPANTS[1] : Pat OCCUPANTS[2] : Terry
バインド配列を使用する場合、PL/SQLでは、次の宣言で各変数をPL/SQL変数にバインドできます(ここで、TypeName
はPL/SQLデータ型を一意に識別し、DataType
には、CHAR
、NCHAR
、VARCHAR2
またはNVARCHAR2
を指定できます)。
TYPETypeName
IS TABLE OFDataType
(<precision>) INDEX BY BINARY_INTEGER;
変数がNUMBER
の配列として宣言された場合、NUMBER
、INTEGER
、FLOAT
またはDOUBLE PRECISION
のデータ型のPL/SQL変数にバインドできます。これを行うには、次の適切な宣言を行います。
TYPETypeName
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; TYPETypeName
IS TABLE OF INTEGER INDEX BY BINARY_INTEGER; TYPETypeName
IS TABLE OF FLOAT INDEX BY BINARY_INTEGER; TYPETypeName
IS TABLE OF DOUBLE PRECISION INDEX BY BINARY_INTEGER;
次の例は、その後PL/SQLブロックで宣言され使用されるoccupants
VARCHAR2
配列を宣言します。
Command> VARIABLE occupants[5] VARCHAR2(15); Command> SETVARIABLE occupants[1] := 'Pat'; Command> SETVARIABLE occupants[2] := 'Terry'; Command> DECLARE TYPE occuname IS TABLE OF VARCHAR2(15) INDEX BY BINARY_INTEGER; x occuname; BEGIN x := :occupants; FOR LROW IN x.FIRST..x.LAST LOOP x(LROW) := x(LROW) || ' Doe'; END LOOP; :occupants := x; END; / PL/SQL procedure successfully completed. Command> PRINT occupants; OCCUPANTS : ARRAY [ 5 ] (Current Size 2) OCCUPANTS[1] : Pat Doe OCCUPANTS[2] : Terry Doe
取得した列のバインド変数の自動作成
ttIsqlにautovariables
を構成すると、TimesTenでは、最後にフェッチした行の各列名を使用したバインド変数を自動作成します。自動バインド変数は、他のすべてのバインド変数と同様に使用できます。
次の例では、employees
表からすべての行が選択されます。すべての列が取得されるので、自動変数が作成され、各列に名前が付けられます。このバインド変数には、各列で取得した最後の値が含まれます。
Command> SET AUTOVARIABLES ON; Command> SELECT * FROM employees; ... < 204, Hermann, Baer, HBAER, 515.123.8888, 1994-06-07 00:00:00, PR_REP, 10000, <NULL>, 101, 70 > < 205, Shelley, Higgins, SHIGGINS, 515.123.8080, 1994-06-07 00:00:00, AC_MGR, 12000, <NULL>, 101, 110 > < 206, William, Gietz, WGIETZ, 515.123.8181, 1994-06-07 00:00:00, AC_ACCOUNT, 8300, <NULL>, 205, 110 > Command> PRINT; EMPLOYEE_ID : 206 FIRST_NAME : William LAST_NAME : Gietz EMAIL : WGIETZ PHONE_NUMBER : 515.123.8181 HIRE_DATE : 1994-06-07 00:00:00 JOB_ID : AC_ACCOUNT SALARY : 8300 COMMISSION_PCT : <NULL> MANAGER_ID : 205 DEPARTMENT_ID : 110
列名として別名を渡すと、自動バインド変数名に列名ではなくその別名が使用されます。
Command> SET AUTOVARIABLES ON; Command> SELECT employee_id ID, First_name SURNAME, last_name LASTNAME FROM employees; ID, SURNAME, LASTNAME ... < 204, Hermann, Baer > < 205, Shelley, Higgins > < 206, William, Gietz > 107 rows found. Command> PRINT; ID : 206 SURNAME : William LASTNAME : Gietz
既知の列名を指定せずにデータをフェッチする問合せでは、列名を表示するようにcolumnlabels
on
を設定します。次の例では、ttConfiguration
組込みプロシージャによって、paramname
およびparamvalue
の列が返されています。
Command> SET AUTOVARIABLES ON; Command> SET COLUMNLABELS ON; Command> call TTCONFIGURATION('LockLevel'); PARAMNAME, PARAMVALUE < LockLevel, 0 > 1 row found. Command> IF :paramvalue = 1 THEN "e:Database-level locking is enabled"; Command> IF NOT :paramvalue = 1 THEN "e:Row-level locking is enabled"; Row-level locking is enabled
また、describe
を使用すると列名を表示することもできます。次の例では、describeコマンドを使用し、ttConfiguration
組込みプロシージャの列名を表示します。
Command> DESCRIBE TTCONFIGURATION; Procedure TTCONFIGURATION: Parameters: PARAMNAME TT_VARCHAR (30) Columns: PARAMNAME TT_VARCHAR (30) NOT NULL PARAMVALUE TT_VARCHAR (1024) 1 procedure found.