SQL でのコードインスペクション
このトピックでは、SQL で利用可能なすべての JetBrains Rider コードインスペクション を一覧表示します。
エディター | インスペクション設定 | インスペクション重大度 | 他の言語 設定ページ  Ctrl+Alt+S で、特定のインスペクションを切り替えたり、その重要度レベルを変更できます。
インスペクション | 説明 | デフォルトの重大度 |
|---|---|---|
デフォルト値なしで非 null 列を追加 | レポートは、DEFAULT 値なしで NOTNULL 列を作成しようとします。 例 (Microsoft SQL Server): CREATE TABLE foo (a INT, b INT)
ALTER TABLE foo ADD c INT NOT NULL;
デフォルトでは、列は NULL 値を保持します。 この例では、列に NULL 値を受け入れないように強制する NOTNULL 制約を使用します。 NULL 値の使用を禁止する場合は、新しいレコードを作成するときに SQL が使用できる DEFAULT 値を設定する必要があります。 ALTER TABLE foo ADD c INT NOT NULL DEFAULT 42;
Add DEFAULT value クイックフィックスを使用すると、DEFAULT 値をすばやく追加できます。 | |
集約関連の問題 | SQL 集計関数の無効な使用箇所を報告します。 次の状況が考慮されます。
| |
あいまいな参照 | 名前は同じですが、異なるテーブルに属する列をレポートします。 例(MySQL): CREATE TABLE foo(id INT PRIMARY KEY);
CREATE TABLE bar(id INT PRIMARY KEY);
SELECT foo.id, bar.id FROM foo, bar WHERE id > 0;
SELECT foo.id, bar.id FROM foo, bar WHERE foo.id > 0;
| |
自動インクリメントの重複 | 自動増分が設定された 2 つの列を含むテーブルを報告します。 MySQL、Microsoft、SQL Server、Db2 ダイアレクトでは、テーブルには自動増分オプションを持つフィールドを 1 つだけ含めることができ、そのフィールドはキーである必要があります。 例(MySQL): CREATE TABLE my_table
(
id INT AUTO_INCREMENT,
c2 INT AUTO_INCREMENT,
);
CREATE TABLE my_table
(
id INT AUTO_INCREMENT PRIMARY KEY,
c2 INT,
);
| |
using 句のカラムを確認 | 両方のテーブルに存在しない USING 句の列を報告します。 例(MySQL): CREATE TABLE t1 (i INT, j INT);
CREATE TABLE t2 (k INT, l INT);
SELECT * FROM t1 JOIN t2 USING (j);
USING 句では、列名が両方のテーブルに存在する必要があり、SELECT クエリは、指定された列名を使用してそれらのテーブルを自動的に結合します。 SELECT * FROM t1 JOIN t2 ON t1.j = t2.l;
| |
エイリアスによってシャドーされた列 | FROM 句の列名と一致する名前の SELECT エイリアスを報告します。 例(MySQL): CREATE TABLE foo (a INT, b INT, c INT);
SELECT a b, c FROM foo;
| |
列は Group By 句に含める必要があります | GROUP BY 句または集計関数呼び出し内にない列を報告します。 例 (Microsoft SQL Server): CREATE TABLE t1 (a INT, b INT);
SELECT a, b FROM t1 GROUP BY a;
SELECT クエリを実行すると、Microsoft と SQL Server は GROUP BY の SELECT a, b FROM t1 GROUP BY a, b;
SELECT a, max(b) max_b FROM t1 GROUP BY a;
| |
定数条件 | 常に TRUE または常に FALSE である WHERE または JOIN 句の条件を報告します。 例(MySQL): CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);
SELECT a FROM t1 WHERE 'Cat' = 'Cat';
| |
定数式 | 常に true、false、null である条件と式を報告します。 例(MySQL): CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);
SELECT a FROM t1 WHERE 'Cat' = 'Cat';
SELECT a FROM t1 WHERE 'Cat' = null;
| |
現在のコンソールスキーマに対する内部検査 | イントロスペクトされていない現在のセッションのスキーマとデータベースをレポートします。 例: この警告は、イントロスペクトされていないスキーマにテーブルを作成しようとしたときに発生する可能性があります。 イントロスペクションは、データソースをインスペクションする方法です。 イントロスペクションを実行すると、データソースの構造情報がインスペクションされ、属性を持つテーブル、列、関数、その他の要素が検出されます。 | |
where 句のない delete または update ステートメント | WHERE 句のない DELETE または UPDATE ステートメントの使用状況を報告します。 WHERE 句がない場合、DELETE はテーブルからすべてのデータを削除し、UPDATE はすべてのテーブル行の値を上書きします。 例(MySQL): CREATE TABLE t1 (a TEXT, b INT, c BOOLEAN);
update t1 set a = 'Smith';
delete from t1;
| |
使用すべきではない型 | 非推奨であり、DBMS の将来のバージョンでなくなる可能性のあるタイプの使用状況を報告します。 報告されたタイプ:
例(Oracle): CREATE TABLE ot.foo(
a NUMBER GENERATED BY DEFAULT AS IDENTITY,
b LONG NOT NULL
);
| |
SELECT 内の列名重複 | SELECT リストの列エイリアスの重複した名前を報告します。 例(Sybase ASE): CREATE TABLE t1 (a TEXT, b INT, c INT);
SELECT a AS x, b AS x FROM t1;
| |
各派生テーブルにはエイリアスが必要です | エイリアスのない派生テーブルをレポートします。 例(MySQL): CREATE TABLE table1 (id INT, name VARCHAR(20), cats FLOAT);
CREATE TABLE table2 (id INT, age INTEGER);
SELECT id AS ID, name, cats, age
FROM (SELECT table1.id, name, cats, age
FROM table1
JOIN table2 ON table1.id = table2.id);
dev.mysql.com の派生テーブル(英語)によると、エイリアスは必須です。 Introduce エイリアスクイックフィックスを使用してエイリアスを追加できます。 クイックフィックスが適用された後: SELECT id AS ID, name, cats, age
FROM (SELECT table1.id, name, cats, age
FROM table1
JOIN table2 ON table1.id = table2.id);
| |
関数のシグネチャー | 組み込み関数の署名の問題を報告します。 インスペクションは、間違った数の引数、無効なキーワード、間違ったデータ型、その他の問題を報告します。 例(MySQL): CREATE TABLE foo (a INT, b INT, c INT)
SELECT IFNULL() FROM foo; -- error
SELECT IFNULL(a) FROM foo; -- error
SELECT IFNULL(a, b) FROM foo; -- OK
SELECT IFNULL(a, b, c) FROM foo; -- error
MySQL では、 | |
引用符で囲む必要がある識別子 | クエリで識別子名として SQL 予約キーワードを使用する場合の状況を報告します。 例 (Microsoft SQL Server): CREATE TABLE select (identity INT IDENTITY NOT NULL, order INT NOT NULL);
クイックフィックスが適用された後: CREATE TABLE [select] ([identity] INT IDENTITY NOT NULL, [order] INT NOT NULL);
| |
不正な日付 / 時間リテラル | 日付と時刻のリテラルのエラーを報告します。 このインスペクションは、MySQL、Oracle、Db2、H2 で使用できます。 例(MySQL): SELECT TIME '10 -12:13:14' FROM dual;
SELECT TIME ' 12 : 13 : 14 ' FROM dual;
SELECT TIME '12 13 14' FROM dual;
SELECT TIME '12-13-14' FROM dual;
SELECT TIME '12.13.14' FROM dual;
SELECT TIME '12:13:' FROM dual;
SELECT TIME '12:13' FROM dual;
SELECT TIME '12:' FROM dual;
この例では、日付は MySQL 標準の日付と時刻のリテラルを無視します。 それらはハイライトされます。 MySQL の日付と時刻のリテラルの詳細については、「dev.mysql.com の日付と時刻のリテラル(英語) 」を参照してください。 次の日付とタイプのリテラルは MySQL で有効です。 SELECT TIME '12:13:14' FROM dual;
SELECT TIME '12:13:14.555' FROM dual;
SELECT TIME '12:13:14.' FROM dual;
SELECT TIME '-12:13:14' FROM dual;
SELECT TIME '10 12:13:14' FROM dual;
SELECT TIME '-10 12:13:14' FROM dual;
| |
不正なカーソルの状態 | SQL ルーチン内の不正なカーソル状態を報告します。
例 (Microsoft SQL Server): CREATE TABLE t(col INT);
CREATE PROCEDURE foo() AS
BEGIN
DECLARE my_cursor CURSOR FOR SELECT * FROM t;
DECLARE a INT;
FETCH my_cursor INTO a;
CLOSE my_cursor;
END;
docs.microsoft.com で CLOSE(Transact-SQL)によると、CLOSE は開いているカーソルで発行する必要があり、CLOSE は、宣言されているだけのカーソルまたはすでに閉じられているカーソルでは許可されていません。 警告を修正するにはカーソルを開く必要があります。 CREATE PROCEDURE foo() AS
BEGIN
DECLARE my_cursor CURSOR FOR SELECT * FROM t;
DECLARE a INT;
OPEN my_cursor;
FETCH my_cursor INTO a;
CLOSE my_cursor;
END;
| |
暗黙的な文字列の切り捨て | 定義された文字数を超える変数を報告します。 例 (Microsoft SQL Server): CREATE PROCEDURE test() AS
BEGIN
DECLARE myVarOk VARCHAR(5) = 'abcde';
DECLARE myVarExceeded VARCHAR(5) = 'abcde12345';
SET myVarOk = 'xyz';
SET myVarExceeded = '123456789';
END;
クイックフィックスが適用された後: CREATE PROCEDURE test() AS
BEGIN
DECLARE myVarOk VARCHAR(5) = 'abcde';
DECLARE myVarExceeded VARCHAR(10) = 'abcde12345';
SET myVarOk = 'xyz';
SET myVarExceeded = '123456789';
END;
| |
カラムに依存するインデックス | インデックス付きテーブルから列を削除しようとしたケースを報告します。 このインスペクションは、Microsoft、SQL Server、Sybase ASE で使用できます。 例 (Microsoft SQL Server): CREATE TABLE test_index
(
col INT NOT NULL,
col2 INT NOT NULL,
col3 INT NOT NULL UNIQUE,
col4 VARCHAR(200)
);
CREATE UNIQUE INDEX aaaa ON test_index (col, col2);
ALTER TABLE test_index
DROP COLUMN col;
| |
NOT NULL 列への NULL の挿入 | NOTNULL 値のみを受け入れる列に NULL 値を挿入した場合を報告します。 例 (Microsoft SQL Server): CREATE TABLE br2 (
id INT NOT NULL,
col1 NVARCHAR (20) NOT NULL,
col2 NVARCHAR (20) NOT NULL,
);
--
INSERT INTO br2 (id, col1, col2)
VALUES (1, NULL, NULL);
非 null として定義されているため、 INSERT INTO br2 (id, col1, col2)
VALUES (1, 42, 'bird');
| |
生成列への挿入 | 生成された列に値を割り当てる INSERT ステートメントをレポートします。 生成された列は読み取ることができますが、その値を直接書き込むことはできません。 例(PostgreSQL): CREATE TABLE foo
(
col1 INT,
col2 INT GENERATED ALWAYS AS (col1 + 1) STORED
);
INSERT INTO foo(col1, col2) VALUES (1, 2);
この列は生成されるため、
| |
誤解を招く参照 | SQL コードのあいまいな参照を報告します。 例: 名前がテーブル列とルーチンパラメーターの両方を参照している場合。 このようなコードを実行すると、直感に反する解決ロジックが原因でエラーや予期しない結果が発生する可能性があります。 通常、よりローカルなスコープを持つ名前の方が優先されます。 例(PostgreSQL): CREATE TABLE foo
(
id INT,
name VARCHAR(5)
);
CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS
$$
DECLARE
b INT;
BEGIN
-- `name` is ambiguous as it is used as a column name and a parameter
SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;
RETURN b;
END;
$$ LANGUAGE plpgsql;
PostgreSQL では、 CREATE TABLE foo
(
id INT,
name VARCHAR(5)
);
CREATE FUNCTION func(name VARCHAR(5)) RETURNS INT AS
$$
#variable_conflict use_column
DECLARE
b INT;
BEGIN
SELECT COUNT(*) INTO b FROM foo t WHERE t.name = name;
RETURN b;
END;
$$ LANGUAGE plpgsql;
| |
列エイリアスがありません | 出力式(たとえば、SELECT ステートメント)に明示的なエイリアスがないクエリをレポートします。 例(PostgreSQL): CREATE TABLE foo(a INT, b INT);
SELECT 1, a + 1 AS A2, MAX(b) AS M
FROM foo;
| |
return ステートメントの欠落 | RETURN ステートメントのない関数を報告します。 例(Oracle): CREATE FUNCTION foo RETURN int AS
BEGIN
END;
CREATE FUNCTION foo RETURN int AS
BEGIN
RETURN 1;
END;
| |
クエリ内の複数の行数制限またはオフセット指定 | 1 つのクエリで複数の行制限句の使用状況を報告します。 例 (Microsoft SQL Server): create table foo(a int);
select top 1 * from foo order by a offset 10 rows fetch next 20 rows only;
SELECT TOP 句は、1 つのレコードのみを返す必要があることを指定するために使用されます。 FETCH 句は、OFFSET 句が処理された後に返される行数を指定します。 ただし、すでに SELECT TOP 制限句があるため、FETCH 句は冗長になる可能性があります。 | |
名前付き引数を使用してください | ルーチン呼び出しで名前なしで使用される引数を報告します。 デフォルトでは、このインスペクションは無効になっています。 名前付きパラメーターと名前なしパラメーターの違いの詳細については、「docs.microsoft.com での名前によるパラメーターのバインド(名前付きパラメーター) 」を参照してください。 例 (Microsoft SQL Server): CREATE FUNCTION foo(n INT, m INT) RETURNS INT AS
BEGIN
RETURN n + m;
END;
CREATE PROCEDURE test AS
BEGIN
foo n = 1, m = 2;
--- The following call misses parameter names and will be highlighted
foo 1, 2;
END;
| |
データソースが構成されていません | データベースツールウィンドウ(表示 | ツールウィンドウ | データベース)にデータソースがないことを報告します。 | |
null 比較 | ISNULL または ISNOTNULL 演算子で置き換えることができる NULL との比較を報告します。 例 (Microsoft SQL Server): CREATE TABLE foo ( id int );
SELECT * FROM foo WHERE NULL = NULL;
SELECT * FROM foo WHERE NULL != NULL;
SELECT * FROM foo WHERE NULL IS NULL;
SELECT * FROM foo WHERE NULL IS NOT NULL;
| |
冗長な ELSE NULL 句 | 冗長な ELSENULL 句を報告します。 例(MySQL): SELECT CASE WHEN 2 > 1 THEN 'OK' ELSE NULL END AS alias FROM foo;
| |
冗長なエイリアス式 | テーブル内の列の名前を複製し、冗長である可能性があるエイリアス式を報告します。 例(PostgreSQL): CREATE TABLE foo(a INT, b INT);
SELECT * FROM foo foo(a, b);
SELECT * FROM foo foo(a);
SELECT * FROM foo foo(x);
SELECT * FROM foo foo(x, y);
最初の 2 つのエイリアスは、 | |
COALESCE 呼び出し内の冗長なコード | COALESCE 関数で NULL と評価されない最初の式を除くすべての引数を報告します。 例(MySQL): SELECT COALESCE(NULL, NULL, NULL, 42, NULL, 'string') as a;
最初の NOTNULL 引数は | |
冗長な並べ替えの指定 | ORDER BY 句で ASC や DESC などの冗長な順序付けの方向を報告します。 例(MySQL): CREATE TABLE foo(a INT, b INT, c INT);
SELECT * FROM foo ORDER BY a ASC, b DESC, c ASC;
ORDER BY キーワードは、デフォルトでレコードを昇順でソートします。 | |
クエリ内の冗長な行数制限 | クエリで FETCH や LIMIT などの冗長な行制限句を報告します。 例(PostgreSQL): CREATE TABLE foo(a INT);
SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo LIMIT 2);
SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo FETCH FIRST 2 ROWS ONLY);
警告を修正するには、LIMIT 句に OFFSET を追加できます。 OFFSET がない場合、LIMIT は冗長なものになります。LIMIT の使用は EXISTS の動作結果に影響を与えません。 OFFSET を使う場合、最初の SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW LIMIT 2);
SELECT * FROM foo WHERE EXISTS(SELECT * FROM foo OFFSET 1 ROW FETCH FIRST 2 ROWS ONLY);
| |
SQL ダイアレクトの検出 | ダイアレクトが SQL ファイルに割り当てられていない状況を報告します。 例: ダイアレクトを割り当てずに新しい SQL ファイルを開くと、最も一致するダイアレクトがアドバイスされる通知が表示されます。 <ダイアレクト> を使用リンクをクリックして、アドバイスされたダイアレクトを使用します。 または、ダイアレクトを変更リンクをクリックして、他のダイアレクトを選択します。 | |
SQL ソース変更の検出 | データベースオブジェクトのソースコードが変更された場合の状況を報告します。 インスペクションは、データベースまたはオブジェクトのイントロスペクションを実行するとトリガーされます。 イントロスペクションは、オブジェクトのソースコードを開き、ステートメントを実行し、コードのリファクタリングを実行するときに実行されます。 また、オブジェクトを右クリックしてリフレッシュを選択すると、イントロスペクションを実行できます。 インスペクションは、次の状況をカバーします。
| |
副作用のあるステートメント | 読み取り専用接続中にデータベースの変更につながる可能性のあるステートメントを報告します。 接続の読み取り専用モードを有効にするには、データベースツールウィンドウ(表示、ツールウィンドウ、データベース)でデータソースを右クリックし、プロパティを選択します。 データソースとドライバーダイアログで、オプションタブをクリックし、読み取り専用チェックボックスをオンにします。 例(MySQL): CREATE TABLE foo(a INT);
INSERT INTO foo VALUES (1);
| |
疑わしいトリガー内のコード | トリガーでの遷移表変数の誤った使用箇所を報告します。 例(HSQLDB): CREATE TABLE foo(a INT);
CREATE TRIGGER trg
AFTER DELETE ON foo
BEGIN
SELECT * FROM NEW;
END;
CREATE TRIGGER trig AFTER INSERT ON foo
REFERENCING OLD ROW AS newrow
FOR EACH ROW WHEN (a > 1)
INSERT INTO foo VALUES (1)
HSQLDB では、DELETE トリガーは OLD 状態でのみ使用できますが、INSERT トリガーは NEW 状態でのみ使用できます。 前の例では、 | |
型の互換性 | タイプ関連のエラーを報告します。 | |
SQL 内の Unicode の使用箇所 |
N 接頭辞がないと、文字列はデータベースのデフォルトのコードページに変換されます。 このデフォルトのコードページでは、特定の文字が認識されない場合があります。 詳細については、 docs.microsoft.com の nchar および nvarchar(Transact-SQL)を参照してください。 例 (Microsoft SQL Server): SELECT 'abcde' AS a;
SELECT N'abcde' AS b;
SELECT 'абвгд' AS c;
SELECT N'абвгд' AS d;
| |
到達不能コード | SQL ルーチン内の到達不能なステートメントを報告します。 例 (Microsoft SQL Server): CREATE FUNCTION foo() RETURNS INT AS
BEGIN
THROW;
RETURN 1;
END;
Microsoft SQL Server では、 | |
未解決の参照 | 未解決の SQL 参照を報告します。 例(MySQL): CREATE TABLE users(id INT, name VARCHAR(40));
CREATE TABLE admins(id INT, col1 INT);
SELECT users.id, admins.id FROM admins WHERE admins.id > 1;
FROM 句に | |
'delete' ステートメントの安全でない 'join' 句 | データベース全体を変更する可能性のあるステートメントの欠落している条件チェックを報告します。 例: ON または WHERE なしの DELETE ステートメント内での JOIN 句の使用。 JOIN の条件付きチェックがない場合、DELETE はテーブル全体の内容をドロップします。 例(MySQL): CREATE TABLE foo (a INT,b INT,c INT);
CREATE TABLE bar (a INT,b INT,c INT);
DELETE table1 FROM foo table1 INNER JOIN bar table2;
| |
未使用の共通テーブル式 | クエリ内の未使用の共通テーブル式(CTE)を報告します。 例(PostgreSQL): CREATE TABLE foo(a INT);
WITH a AS (SELECT 1 AS x FROM foo)
SELECT 1 + 2 FROM foo;
WITH を使うことで、 | |
未使用のサブクエリ項目 | 外部クエリ式で参照されていない列、エイリアス、その他のサブクエリ項目をレポートします。 例(PostgreSQL): CREATE TABLE for_subquery(id INT);
SELECT a, q FROM (SELECT 1 AS a, 10 AS b, 2 + 3 AS q, id
FROM for_subquery) x;
サブクエリから | |
未使用の変数 | 未使用の引数、変数、パラメーターを報告します。 例(PostgreSQL): CREATE FUNCTION foo(PARAMUSED INT, PARAMUNUSED INT) RETURNS INT AS
$$
BEGIN
RETURN PARAMUSED;
END
$$ LANGUAGE plpgsql;
| |
GOTO ステートメントの使用箇所 | ループを終了するために使用される後方 GOTO ステートメントおよび GOTO ステートメントの使用状況を報告します。 GOTO ステートメントを広範囲に使用することは、一般的に推奨されません。 詳細については、 ibm.com の SQL プロシージャーの GOTO ステートメント(英語)を参照してください。 GOTO を使用して前のステートメントに戻る代わりに、ループの使用を検討してください。 GOTO で WHILE ループを終了する代わりに、他の制御フローステートメント(たとえば、RETURN または BREAK)の使用を検討してください。 例(Oracle): CREATE PROCEDURE test(n INT) AS
DECLARE
x INT;
BEGIN
x := 0;
GOTO a;
<<a>> x := 1;
IF (n = 0) THEN
GOTO a;
END IF;
WHILE TRUE
LOOP
GOTO b;
END LOOP;
<<b>> x := 3;
END;
| |
トリガー内でトランザクション管理ステートメントを使用 | トリガー本体での COMMIT や ROLLBACK などのトランザクション管理ステートメントの使用状況を報告します。 トリガー本体に COMMIT または ROLLBACK ステートメントがある場合、トリガーはコンパイルされません。 トリガーはトランザクション中に開始されるため、失敗が発生します。 トリガーが開始しても、現在のトランザクションはまだ完了していません。 COMMIT がトランザクションを終了すると、両方のステートメント(COMMIT と ROLLBACK)が例外になります。 トリガーで実行される変更は、トリガーを開始した所有トランザクションによってコミット(またはロールバック)される必要があります。 例(Oracle): CREATE TABLE employee_audit
(
id INT NOT NULL,
update_date DATE NOT NULL,
old_name VARCHAR2(100),
new_name VARCHAR2(100)
);
CREATE TABLE employees
(
id INT NOT NULL,
name VARCHAR2(100) NOT NULL
);
CREATE OR REPLACE TRIGGER trig_commit
AFTER UPDATE OF name
ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);
COMMIT;
END;
CREATE OR REPLACE TRIGGER trig_rollback
AFTER UPDATE OF name
ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit VALUES (:old.id, SYSDATE, :old.name, :new.name);
ROLLBACK;
END;
| |
COALESCE 関数の代わりに CASE を使用 (およびその逆) | CASE と合体の呼び出しが相互に置き換え可能な状況を報告します。 このインスペクションには次のインテンションアクションがあります:『合体』呼び出しに置き換え、または逆に CASE 式に置き換えます。 例(MySQL): SELECT
-- this CASE may be replaced by COALESCE
CASE
WHEN C1 IS NOT NULL THEN C1
ELSE 0
END
FROM dual;
この例では、CASE ステートメントを同じ出力を生成する CASE 式を使用する場合は、インスペクションページの COALESCE よりも CASE 式を優先する関数オプションを選択します。 | |
条件関数の代わりに CASE を使用 (およびその逆) | CASE と IF が交換可能な状況を報告します。 例(MySQL): SELECT CASE
WHEN C1 IS NULL THEN 1
ELSE 0
END
FROM dual;
コードを短くするために、CASE 構造を IF に置き換えることができます。 これを行うには、「IF」呼び出しインテンションアクションで置換を適用します。 サンプルコードは次のようになります。 SELECT IF(C1 IS NULL, 1, 0)
FROM dual;
IF を CASE に戻すには、IF をクリックして、Replace withCASE 式インテンションアクションを適用します。 | |
名前付き引数および位置指定引数の使用 | 位置引数が名前付き引数の後に続く呼び出しを報告します。 PostgreSQL、Oracle、Db2 で動作します。 例(PostgreSQL の場合): CREATE FUNCTION foo(a int, b int, c int) RETURNS int
LANGUAGE plpgsql AS
$$
BEGIN
RETURN a + b + c;
END
$$;
SELECT foo(a => 1, b => 2, c => 3);
-- `3` goes after the named argument
SELECT foo(1, b => 2, 3);
-- `1` and `3` go after the named argument
SELECT foo(b => 2, 1, 3);
| |
VALUES 句の多重度 | VALUES のパラメーターの数がターゲットテーブルの列の数と一致しない状況を報告します。 例(MySQL): CREATE TABLE foo(a INT, b INT, c INT);
INSERT INTO foo VALUES (1,2,3,4)
|