SQLite の変数

Bilal Shahid 2023年6月21日
  1. SQLite の変数
  2. SQLite の変数の型
  3. SQLite で変数を宣言する
  4. SQLite で宣言された変数を使用する
SQLite の変数

関数を作成して使用すると、SQLite でクエリを作成するときに非常に役立つことがわかります。 これらの関数と手順の一部は、SQLite 内で変数を使用しています。

SQLite の変数

変数は、正しく使用すれば非常に有益であることが証明されます。 例を使用しながら説明するのが最善です。

2つの数値を加算するプロシージャまたは関数を作成するとします。 これは、適切な演算子を使用することで簡単に実現できます。

ただし、もう少し複雑にして、これらの数値の両方をユーザーからの入力として取得するとすると、それほど単純ではなくなります。

ユーザーは任意の数値を入力できるため、値をハードコードすることはできません。 そんな時、変数が役に立ちます。

ユーザーが入力した値を変数に格納し、上書きされるかプログラムが終了するまで保持します。 ここで、2つのランダムな値を追加する代わりに、ユーザーが選択した 2つの値を保持する変数を追加できます。

これは、後で使用しない場合は、3 番目の変数または既存の 2つの変数に格納できます。 変数を使用すると、プロシージャ内で複数のデータ型の任意の値を簡単に格納および操作できます。

ハードコードされた値は信頼できないため、これはどの関数にとっても重要です。

SQLite の変数の型

SQLite には複数の種類の変数があります。 これは、その変数に格納されるデータをシステムに伝えるために、異なるデータ型を持っていることを意味します。

SQLite で使用できるデータ型の一部を次に示します。

  • NULL: このタイプは、変数に null 値を追加します。
  • INTEGER: これは符号付き整数用です。 正と負の数値はすべて、0、1、2、3、4、6、または 8 バイトです。
  • REAL: これは、小数点付きの正または負の数を意味する浮動小数点変数用です。 これは 8 バイトの数値として保管されます。
  • TEXT: 名前が示すように、TEXT にはテキスト文字列が含まれます。 これは多くの場合、UTF-8、UTF-16BE、UTF-16LE などのデータベース エンコーディングを使用して保存されます。
  • BLOB: これは、データが入力されたのと同じ方法で格納される特別な変数で、使用されたデータ型に適応します。

間違ったデータ型を使用したことがある場合、またはコードの途中で変更したい場合は、CAST 式を使用していつでも変更できることに注意してください。 これによりデータ型と内容が変更されるため、慎重に使用してください。 必要のないところに対応する ASCII 値になってしまう可能性があります。

SQLite で変数を宣言する

SQLite で変数を使用できるようにするには、最初に変数を宣言する必要があります。 作成しようとしている変数の型にもよりますが、宣言プロセスはかなり単純です。 ただし、ネイティブ構文とは少し異なります。

SQLite では、メモリ内の一時テーブルを使用して仮想的にプロセスを実行する必要があります。 これを行う方法の例を次に示します。

BEGIN;

/* This tells your system to use in-memory */
PRAGMA temp_store = 2;

/* creating the temp table with the variables you need */
CREATE TEMP TABLE Vars(text_val TEXT PRIMARY KEY, real_val REAL, integer_val INTEGER, blob_value BLOB, text_val TEXT);

/* The declaration part */
INSERT INTO Vars (text_val)
VALUES ('Any value');

DROP TABLE Vars;

END;

上記のコードを使用すると、変数を間接的に宣言する方法を回避できます。 ここでは、最初にインメモリ一時テーブルを作成する必要があります。 これを使用して、好みのデータ型の列を追加し、INSERT 句を使用してそれらに値を格納できます。

BEGIN 句と END 句は、手順の開始点と終了点を特定するのに役立つため、このメソッドを使用する際に含める必要があります。 この後、好きなようにデータを操作して使用できます。

これについては、以下で詳しく説明しています。

SQLite で宣言された変数を使用する

変数の宣言方法はわかりましたが、変数の使用方法を学ぶことも同様に重要です。 これがないと、宣言した変数を使用できません。

上で使用したのと同じコードの更新バージョンを使用して、そうしましょう。

BEGIN;

/* Add codes from above to use in memory,
create the temp table,
and declaration first*/

/* Assignment (select a storage class according to your requirements) */
UPDATE Vars SET integer_val= ...
WHERE text_val= 'Any value';

/* Get the value of the variable that is to be used in the expression) */
...
(SELECT coalesce(real_val, integer_val, blob_value, text_val)
FROM Vars
WHERE text_val= 'Any value' LIMIT 1) ...

DROP TABLE Vars;

END;

このコードには、変数の値を割り当てるための追加がいくつかあります。 まず、変数に値を割り当ててから、それらをリンクして式で使用する必要があります。

最後に、関数が完了するとテーブルが削除されます。 必要に応じて変数が動作できるように、いつでもコード行を追加できます。

ただし、テーブルを削除すると、保存されているすべてのデータが削除されるため、すべてを使い終わったら必ず削除してください。

もう 1つの方法は、WITH 句を使用することです。

...
WITH const AS (SELECT 'any value' AS text_val, 10 AS int_val)
SELECT table.cost, (table.cost + const.int_val) AS cost2
FROM table, const
WHERE table.text_val= const.text_val

ここでは、2つの変数が追加され、そのうちの 1つに格納されます。

注: テーブルに挿入された後は、一連のクラスの和集合でいつでもこれを置き換えることができます。 ロジックは異なる場合がありますが、コンセプトは変わりません。

以上が、SQLite の変数について知っておくべきことのすべてでした。 これで、好みに応じて簡単に作成して使用できるようになりました。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub