- SQL Serverの場合(T-SQLを使用する場合):
CREATE PROCEDURE GetTableData
@TableName NVARCHAR(128)
AS
BEGIN
DECLARE @SqlStatement NVARCHAR(MAX)
SET @SqlStatement = N'SELECT * FROM ' + QUOTENAME(@TableName)
EXEC sp_executesql @SqlStatement
END
この例では、@TableName
パラメータを使用して、動的SQL文を構築しています。QUOTENAME
関数を使用して、テーブル名をエスケープしてセキュリティを向上させています。
- MySQLの場合(ストアドプロシージャ内でプリペアドステートメントを使用する場合):
DELIMITER //
CREATE PROCEDURE GetTableData(IN TableName VARCHAR(128))
BEGIN
SET @SqlStatement = CONCAT('SELECT * FROM ', TableName);
PREPARE stmt FROM @SqlStatement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
この例では、CONCAT
関数を使用して動的SQL文を構築し、PREPARE
ステートメントを使用してプリペアドステートメントを作成しています。
- PostgreSQLの場合(PL/pgSQLを使用する場合):
CREATE OR REPLACE FUNCTION GetTableData(TableName VARCHAR(128))
RETURNS TABLE (...) -- 返すカラムを指定します
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY EXECUTE format('SELECT * FROM %I', TableName);
END $$;
この例では、EXECUTE
文を使用して動的SQL文を実行しています。format
関数を使用して、テーブル名をエスケープしています。
これらの例では、指定されたテーブル名を使用して動的SQL文を実行する方法を示しています。ただし、動的SQLはセキュリティ上の懸念がありますので、テーブル名の入力値を適切に検証およびエスケープすることが重要です。また、データベースの種類によっては、さらなる制約やベストプラクティスが存在する場合がありますので、公式のドキュメントやリファレンスを参照することをおすすめします。