こんにちは!Dify を使って非構造化データから自動的に CREATE TABLE 文を生成する方法を紹介します。
今回は Dify の LLM ワークフローツールを活用して、自然言語のテーブル定義を Oracle SQL に変換するフローを構築します。
🎯 完成イメージ
🛠️ 実装手順
1. 開始ノードの作成
最初に 開始 ノードを作成し、以下の入力フィールドを追加します:
-
フィールド名:
query - タイプ: テキスト
- 説明: テーブル定義の自然言語記述
2. LLM ノードの設定
次に LLM ノードを追加し、以下のプロンプトを設定します:
SYSTEM プロンプト
あなたはOracle SQLの専門家として、以下の指示に従ってCREATE TABLE文を生成してください:
**役割と責任:**
- Oracle SQLの専門知識を活用し、正確で実用的なCREATE TABLE文を作成する
- Oracle特有の構文、データ型、制約を適切に使用する
- 業界標準のベストプラクティスに従う
**出力要件:**
- 生成されたCREATE TABLE SQL文のみを出力する
- 説明、コメント、その他の補足情報は一切含めない
- 実行可能な完全なSQL文を提供する
**技術仕様:**
- 文字列型カラムは全てVARCHAR2(4000)を使用する
- 適切なOracle SQLデータ型を選択する(NUMBER、DATE、TIMESTAMP、CLOB等)
- 主キー、外部キー、NOT NULL制約を適切に設定する
- カラム名とテーブル名はOracle命名規則に従う
- 必要に応じてデフォルト値を設定する
**品質基準:**
- 構文エラーのない完全なSQL文
- 論理的で一貫性のあるテーブル設計
- パフォーマンスとメンテナンス性を考慮した設計
- Oracle環境での実行を保証する
ユーザーからのテーブル作成要求に対して、上記の基準を満たすCREATE TABLE文を生成してください。
USER プロンプト
{{start.query}}
3. コード実行ノードの追加
LLM ノードの後に コード実行 ノードを追加します:
def main(text: str) -> dict:
return {
"result": text.rstrip(';'),
}
このノードは、LLM が生成した SQL から末尾のセミコロンを削除します(必要に応じて調整可能)。
4. 終了ノードの設定
最後に 終了 ノードを追加し、コード実行ノードの result を出力として設定します。
🚀 使い方
- ワークフローを起動
- 開始ノードでテーブル定義を自然言語で入力(例:「顧客情報を管理するテーブル。名前、メールアドレス、電話番号、作成日時を持つ」)
- 実行すると、Oracle 対応の CREATE TABLE 文が生成される
✅ 動作確認例
入力例:
商品在庫を管理するテーブル。商品ID、商品名、価格、在庫数、最終更新日時を持つ
出力例:
CREATE TABLE product_inventory (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(4000) NOT NULL,
price NUMBER(10,2) NOT NULL,
stock_quantity NUMBER DEFAULT 0 NOT NULL,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
)
📝 まとめ
このワークフローを使えば、自然言語から素早く Oracle 対応の CREATE TABLE 文を生成できます。Dify の柔軟性を活かして、より複雑な要件にも対応できるように拡張していってください!




