{"workflow":{"id":13264,"name":"Ingest Excel data into Oracle and chat with it using Select AI and Azure OpenAI","views":213,"recentViews":1,"totalViews":213,"createdAt":"2026-02-09T07:58:48.127Z","description":"# Overview\n\nThis n8n workflow template enables querying Excel data stored in an Oracle Database using natural language powered by **Oracle Select AI**.\n\nThe solution consists of **two workflows**:\n\n- **Workflow A** uploads an Excel file, creates a table in Oracle Database, inserts the data, and registers the table with Oracle Select AI.\n- **Workflow B** provides a chat interface that allows users to query the uploaded data using natural language.\n\nUser questions are translated into SQL by Oracle Select AI, executed directly in the database, and returned as query results.\n\n# Features\n\n- **Natural language queries** – Ask questions in plain English  \n- **AI-powered SQL generation** – Automatically converts questions to SQL using Oracle Select AI  \n- **Real-time responses** – Queries run directly on Oracle Database  \n- **Secure by design** – Data never leaves Oracle Database  \n- **Chat UI support** – Built-in chat interface when the workflow is public  \n- **API-ready** – Can be used as a REST API endpoint  \n\n# Prerequisites\n\n## Oracle Database\n\n- **Oracle Database 23ai or later** (required for Select AI)\n- Database user with the following privileges:\n  - `CREATE TABLE`\n  - `INSERT`\n  - `EXECUTE` on `DBMS_CLOUD_AI`\n\nOracle Select AI supports the following AI providers:\n- OCI Generative AI\n- OpenAI\n- **Azure OpenAI (used in this template)**\n- Google Gemini\n\n## Azure OpenAI\n\n- Active **Azure OpenAI** resource\n- Deployed GPT model (for example: `gpt-4`, `gpt-4o-mini`)\n- Azure **resource name** and **deployment name**\n\n## Oracle Credential for Azure OpenAI\n\nCreate an Oracle credential to securely store the Azure OpenAI API key:\n\n```sql\nBEGIN\n  DBMS_CLOUD.CREATE_CREDENTIAL(\n    credential_name =&gt; 'AZURE_OPENAI_CRED',\n    username        =&gt; 'azure_openai',\n    password        =&gt; 'YOUR_AZURE_OPENAI_API_KEY'\n  );\nEND;\n/\n```\n## Select AI Configuration\n\nIn **Workflow A**, update the Select AI configuration node with your environment details:\n```\n{\n  \"profile_name\": \"EXCEL_AI\",\n  \"provider\": \"azure\",\n  \"azure_resource_name\": \"YOUR_RESOURCE_NAME\",\n  \"azure_deployment_name\": \"YOUR_MODEL_DEPLOYMENT\",\n  \"credential_name\": \"AZURE_OPENAI_CRED\",\n  \"table_name\": \"AUTO_GENERATED\"\n}\n```\n**Note**:\nThe table name is generated automatically during upload and should not be modified manually.\n\n# Usage\n### Upload Excel File (Workflow A)\n\nUpload an Excel file using the webhook endpoint:\n```\ncurl -X POST \\\n  -F \"file=@your-file.xlsx\" \\\n  https://your-n8n-instance.com/webhook/upload-excel\n```\n**Expected Response**\n```\n{\n  \"success\": true,\n  \"tableName\": \"UPLOAD_EXCEL_20260209123456789\",\n  \"columns\": [\"ID\", \"NAME\", \"AGE\", \"CITY\", \"SALARY\"],\n  \"rowCount\": 150,\n  \"selectAIProfile\": \"EXCEL_AI\",\n  \"message\": \"Excel file successfully ingested and registered with Oracle Select AI\",\n  \"nextSteps\": [\n    \"Query your data using: SELECT AI EXCEL_AI &lt;your question&gt;\",\n    \"Example: SELECT AI EXCEL_AI show me the top 10 records by salary\"\n  ]\n}\n```\nThe returned *tableName* is used internally by **Workflow B** to scope chat queries to the correct dataset.\n\n### Query Your Data with Select AI (Workflow B)\n\nAfter the Excel file is uploaded and registered, you can query the data using natural language through Workflow B.\n\n### Example Select AI Queries\n\nAfter uploading an Excel file, you can query the data using natural language.\n\nExamples:\n- Show me the top 10 records by salary from EXCEL_UPLOAD_COMPANY_TABLE\n- EXCEL_AI count records grouped by city EXCEL_UPLOAD_TRAVEL_TABLE\n- What is the average salary per department from EXCEL_UPLOAD_DEPT_TABLE\n\n![n8n Query Examples](https://i.imgur.com/aYJKYhZ.png)\n\n**Workflow B must be used together with Workflow A** and must be configured with the same:\n- Oracle Database \n- Select AI profile name\n- Azure OpenAI configuration\n\n# References\n\nOracle Select AI Documentation\nhttps://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/select-ai-examples.html\n\nAzure OpenAI Documentation\nhttps://learn.microsoft.com/azure/ai-services/openai/\n\nOracle LiveLabs – Select AI Workshop\nhttps://livelabs.oracle.com/ords/r/dbpm/livelabs/run-workshop?p210_wid=3831\n","workflow":{"id":"IeBivCzRFCURDFhsQYiLK","meta":{"instanceId":"e570f61216b80b46f78814a26a30f9e42d0a7e3fcd3937a04ac60fd2d74ea436","templateCredsSetupCompleted":true},"name":"AI-powered Excel data ingestion and chat with Oracle Select AI","tags":[{"id":"CbMTvzvsbyZDStoF","name":"Oracle","createdAt":"2026-02-09T05:31:29.437Z","updatedAt":"2026-02-09T05:31:29.437Z"},{"id":"2I1PThbTTnNo0Bsy","name":"Excel","createdAt":"2026-02-09T05:31:29.442Z","updatedAt":"2026-02-09T05:31:29.442Z"},{"id":"80WpuBi1dqegELmF","name":"AI","createdAt":"2026-02-09T05:31:29.450Z","updatedAt":"2026-02-09T05:31:29.450Z"},{"id":"gnoHTwMC409NIKTr","name":"OpenAI","createdAt":"2026-02-09T05:31:29.454Z","updatedAt":"2026-02-09T05:31:29.454Z"},{"id":"sSCvAMZ48mOAtMOJ","name":"Azure","createdAt":"2026-02-09T05:31:29.455Z","updatedAt":"2026-02-09T05:31:29.455Z"},{"id":"Uy7mraVsYyA8H7tI","name":"Chat","createdAt":"2026-02-09T05:43:15.141Z","updatedAt":"2026-02-09T05:43:15.141Z"},{"id":"QhTegm7SSdZCE3B4","name":"Select AI","createdAt":"2026-02-09T05:43:15.144Z","updatedAt":"2026-02-09T05:43:15.144Z"}],"nodes":[{"id":"0a22c3e5-cb40-49e8-9f85-2016509f06db","name":"Webhook - File Upload","type":"n8n-nodes-base.webhook","position":[-336,-288],"webhookId":"upload-excel-webhook","parameters":{"path":"upload-excel","options":{"rawBody":false},"httpMethod":"POST","responseMode":"lastNode"},"typeVersion":1.1},{"id":"58fbff39-0a0a-498f-bab5-4344ee757ce6","name":"Validate & Normalize File","type":"n8n-nodes-base.code","position":[-112,-288],"parameters":{"jsCode":"// Detect and fix file binary data\n// Webhook stores files with dynamic property names, we normalize them here\nconst items = $input.all();\n\nfor (const item of items) {\n  if (!item.binary) {\n    throw new Error('No binary data found. Please upload a file.');\n  }\n  \n  // Get the first binary property (whatever the webhook named it)\n  const binaryKeys = Object.keys(item.binary);\n  if (binaryKeys.length === 0) {\n    throw new Error('Binary object exists but is empty');\n  }\n  \n  const firstKey = binaryKeys[0];\n  let binaryData = item.binary[firstKey];\n  \n  // Fix MIME type and extension based on filename\n  const fileName = binaryData.fileName || '';\n  \n  if (fileName.endsWith('.xlsx')) {\n    binaryData.mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n    binaryData.fileExtension = 'xlsx';\n  } else if (fileName.endsWith('.xls')) {\n    binaryData.mimeType = 'application/vnd.ms-excel';\n    binaryData.fileExtension = 'xls';\n  } else {\n    throw new Error(`Invalid file type: ${fileName}. Please upload .xlsx or .xls files only.`);\n  }\n  \n  // Ensure binary data is available as 'data' for downstream nodes\n  if (firstKey !== 'data') {\n    item.binary.data = binaryData;\n  }\n}\n\nreturn items;"},"typeVersion":2},{"id":"c8ca06b8-33d0-4da7-a4ef-51b3d5462cb0","name":"Extract from Excel","type":"n8n-nodes-base.extractFromFile","position":[112,-288],"parameters":{"options":{},"operation":"xlsx"},"typeVersion":1},{"id":"de6f63ea-0df4-4818-8880-07640b0af2ec","name":"Infer Schema & Table Name","type":"n8n-nodes-base.code","position":[336,-288],"parameters":{"jsCode":"// Automatically infer schema from Excel data\n// Generates Oracle table name and column definitions\nconst rows = $input.all().map(i => i.json);\nif (!rows.length) throw new Error('Excel file is empty');\n\n// Sanitize column names for Oracle compatibility\nconst sanitize = k => k.trim()\n  .replace(/[^a-zA-Z0-9]/g, '_')\n  .replace(/^_+|_+$/g, '')\n  .toUpperCase();\n\nconst sample = rows[0];\nconst columns = [];\n\n// Infer data types from first row\nfor (const [k, v] of Object.entries(sample)) {\n  let type = 'VARCHAR2(4000)';\n  if (typeof v === 'number') {\n    type = 'NUMBER';\n  } else if (v && !isNaN(Date.parse(v))) {\n    type = 'DATE';\n  }\n  columns.push({ name: sanitize(k), type });\n}\n\n// Clean all rows with sanitized column names\nconst cleanRows = rows.map(r => {\n  const o = {};\n  for (const [k, v] of Object.entries(r)) {\n    o[sanitize(k)] = v;\n  }\n  return o;\n});\n\n// Generate unique table name with timestamp\nconst tableName = `UPLOAD_EXCEL_${new Date().toISOString().replace(/[-:.TZ]/g, '')}`;\n\nreturn [{ json: { tableName, columns, rows: cleanRows } }];"},"typeVersion":2},{"id":"6de17ea8-672a-49c1-a9f7-23757464dff0","name":"Create Oracle Table","type":"n8n-nodes-base.oracleDatabase","notes":"Configure your Oracle Database credentials in the credentials panel","position":[560,-288],"parameters":{"query":"={{ (() => {\n  const cols = $json.columns.map(c => `${c.name} ${c.type}`).join(', ');\n  return `CREATE TABLE ${$json.tableName} (${cols}, UPLOADED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`;\n})() }}","options":{},"operation":"execute"},"credentials":{"oracleDBApi":{"id":"mGr6r7HBiH2VvIiR","name":"Oracle Database Credentials account"}},"typeVersion":1},{"id":"f3605d97-8dc0-4aac-8e64-f0ec6afdb3b7","name":"Restore Data Rows","type":"n8n-nodes-base.code","position":[784,-216],"parameters":{"jsCode":"// Restore original data rows for insertion\nconst infer = $(\"Infer Schema & Table Name\").first().json;\nreturn infer.rows.map(r => ({ json: r }));"},"typeVersion":2},{"id":"e7dc3285-3f21-4e54-ae92-0b8ff05424d3","name":"Split into Batches","type":"n8n-nodes-base.splitInBatches","notes":"Process rows in batches of 50 for better performance","position":[1008,-288],"parameters":{"options":{},"batchSize":50},"typeVersion":3},{"id":"eade0b96-2816-4a48-887d-2eb815e63d03","name":"Insert Rows into Oracle","type":"n8n-nodes-base.oracleDatabase","notes":"Update the schema name to match your Oracle schema (e.g., MOVIESTREAM, ADMIN, etc.)","position":[1232,-288],"parameters":{"table":{"__rl":true,"mode":"name","value":"={{ $(\"Infer Schema & Table Name\").first().json.tableName }}"},"schema":{"__rl":true,"mode":"name","value":"={{ $json.schema || 'YOUR_SCHEMA_NAME' }}"},"columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[]},"options":{}},"credentials":{"oracleDBApi":{"id":"mGr6r7HBiH2VvIiR","name":"Oracle Database Credentials account"}},"typeVersion":1},{"id":"437acba1-e305-4b3f-8999-7fe4fd0b2776","name":"Configure Select AI Settings","type":"n8n-nodes-base.set","notes":"⚠️ IMPORTANT: Update these values with your Azure OpenAI configuration:\n- azure_resource_name: Your Azure OpenAI resource name\n- azure_deployment_name: Your GPT model deployment name\n- credential_name: Oracle credential name for Azure OpenAI (created via DBMS_CLOUD.CREATE_CREDENTIAL)","position":[1456,-288],"parameters":{"options":{},"assignments":{"assignments":[{"id":"profile-config","name":"selectAIConfig","type":"object","value":"={{ {\n  \"profile_name\": \"EXCEL_AI\",\n  \"provider\": \"azure\",\n  \"azure_resource_name\": \"YOUR_AZURE_RESOURCE_NAME\",\n  \"azure_deployment_name\": \"YOUR_DEPLOYMENT_NAME\",\n  \"credential_name\": \"YOUR_ORACLE_CREDENTIAL_NAME\",\n  \"table_name\": $(\"Infer Schema & Table Name\").first().json.tableName\n} }}"}]}},"typeVersion":3.4},{"id":"326e9710-108f-44c7-a6f7-7ec4f9b5fb25","name":"Register with Select AI","type":"n8n-nodes-base.oracleDatabase","notes":"Registers the uploaded table with Oracle Select AI for natural language querying","position":[1680,-288],"parameters":{"query":"=DECLARE\n  v_owner VARCHAR2(128);\n  v_profile_name VARCHAR2(128) := '{{ $json.selectAIConfig.profile_name }}';\n  v_table_name VARCHAR2(128) := '{{ $json.selectAIConfig.table_name }}';\nBEGIN\n  -- Get current schema\n  SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER')\n  INTO v_owner\n  FROM dual;\n\n  -- Drop profile if it already exists\n  BEGIN\n    DBMS_CLOUD_AI.DROP_PROFILE(profile_name => v_profile_name);\n  EXCEPTION\n    WHEN OTHERS THEN\n      NULL; -- Ignore if profile doesn't exist\n  END;\n\n  -- Create Select AI profile with enforced object list\n  DBMS_CLOUD_AI.CREATE_PROFILE(\n    profile_name => v_profile_name,\n    attributes => JSON_OBJECT(\n      'provider' VALUE '{{ $json.selectAIConfig.provider }}',\n      'azure_resource_name' VALUE '{{ $json.selectAIConfig.azure_resource_name }}',\n      'azure_deployment_name' VALUE '{{ $json.selectAIConfig.azure_deployment_name }}',\n      'credential_name' VALUE '{{ $json.selectAIConfig.credential_name }}',\n      'object_list' VALUE JSON_ARRAY(\n        JSON_OBJECT(\n          'owner' VALUE v_owner,\n          'name' VALUE v_table_name\n        )\n      ),\n      'enforce_object_list' VALUE TRUE\n    )\n  );\nEND;","options":{},"operation":"execute"},"credentials":{"oracleDBApi":{"id":"mGr6r7HBiH2VvIiR","name":"Oracle Database Credentials account"}},"typeVersion":1},{"id":"9a7b5d3f-36ae-4fbb-8f63-6869e1be1ae6","name":"Prepare Response","type":"n8n-nodes-base.code","position":[1904,-288],"parameters":{"jsCode":"// Prepare success response\nconst infer = $(\"Infer Schema & Table Name\").first().json;\nconst config = $json.selectAIConfig;\n\nreturn [{ \n  json: {\n    success: true,\n    tableName: infer.tableName,\n    columns: infer.columns.map(c => c.name),\n    rowCount: infer.rows.length,\n    selectAIProfile: config.profile_name,\n    message: 'Excel file successfully ingested and registered with Oracle Select AI',\n    nextSteps: [\n      `Query your data using: SELECT AI ${config.profile_name} your question here`,\n      `Example: SELECT AI ${config.profile_name} show me the top 10 records by salary`\n    ]\n  }\n}];"},"typeVersion":2},{"id":"d06ad825-0210-4f1d-8d46-cf5f718de089","name":"Return Success","type":"n8n-nodes-base.respondToWebhook","position":[2128,-288],"parameters":{"options":{}},"typeVersion":1},{"id":"807306dc-fd4b-42bf-aa89-31d910441360","name":"Chat Input","type":"@n8n/n8n-nodes-langchain.chatTrigger","position":[672,480],"webhookId":"chat-with-excel-ai","parameters":{"public":true,"options":{}},"typeVersion":1},{"id":"a9b736ab-d1f9-4d5d-8a87-0a7d54646ef0","name":"Configure Select AI Profile","type":"n8n-nodes-base.set","notes":"⚠️ IMPORTANT: Update 'profileName' to match your Select AI profile name.\nThis should be the same profile created when you uploaded your Excel file.\nDefault: EXCEL_AI","position":[896,480],"parameters":{"options":{},"assignments":{"assignments":[{"id":"profile-name","name":"profileName","type":"string","value":"EXCEL_AI"}]}},"typeVersion":3.4},{"id":"2b607c70-260b-49c8-ac7e-fda09f6238fd","name":"Oracle Select AI Query","type":"n8n-nodes-base.oracleDatabase","notes":"Executes natural language queries against your Excel data using Oracle Select AI.\nThe AI converts your question into SQL and returns the results.","position":[1120,480],"parameters":{"query":"={{ `SELECT DBMS_CLOUD_AI.GENERATE(\n  prompt => '${$('Chat Input').item.json.chatInput.replace(/'/g, \"''\")}',\n  profile_name => '${$json.profileName}',\n  action => 'runsql'\n) AS RESPONSE FROM dual` }}","options":{},"operation":"execute"},"credentials":{"oracleDBApi":{"id":"mGr6r7HBiH2VvIiR","name":"Oracle Database Credentials account"}},"typeVersion":1},{"id":"67577111-0c99-45a4-aede-b9be25d7c41a","name":"Format Chat Response","type":"n8n-nodes-base.code","notes":"Formats the AI response for display in the chat interface","position":[1344,480],"parameters":{"jsCode":"// Extract and format the AI response\nconst response = $json.RESPONSE || Object.values($json)[0];\n\nif (!response) {\n  return [{ \n    json: { \n      message: 'No data returned. Please try rephrasing your question.' \n    } \n  }];\n}\n\n// Return formatted response\nreturn [{ \n  json: { \n    message: response \n  } \n}];"},"typeVersion":2},{"id":"909c841c-d019-46cd-8e19-c5c61a1b802d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[384,96],"parameters":{"color":6,"width":1216,"height":576,"content":"## Workflow B\n### How It Works\nUser asks question in natural language\n         ↓\nChat Input captures the question\n         ↓\nConfigure Select AI Profile (sets profile name)\n         ↓\nOracle Select AI Query\n- Sends question to DBMS_CLOUD_AI.GENERATE\n- AI converts question to SQL\n- Executes SQL against your data\n- Returns formatted results\n↓\nFormat Chat Response (cleans up the output)\n↓\nDisplay answer to user"},"typeVersion":1},{"id":"3e34740c-1175-4b14-9508-eea32c9be7fd","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[464,-752],"parameters":{"color":7,"width":288,"height":464,"content":"## Configure Oracle Database Credentials\n\nClick on any Oracle Database node (e.g., \"Create Oracle Table\")\nClick Create New Credential\nEnter your Oracle connection details:\n\nHost: Your Oracle DB host\nDatabase: Service name or SID\nUser: Database username\nPassword: Database password\nPort: 1521 (default)\n\n\nSave the credential\nApply the same credential to all Oracle nodes:\n\nCreate Oracle Table\nInsert Rows into Oracle\nRegister with Select AI"},"typeVersion":1},{"id":"ef8efe2a-343f-4684-85d9-58ecffed9c24","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1184,-480],"parameters":{"color":7,"width":192,"height":192,"content":"### Update Schema Name\nIn the \"Insert Rows into Oracle\" node:\nChange YOUR_SCHEMA_NAME to your actual Oracle schema (e.g., ADMIN, SCOTT, etc.)"},"typeVersion":1},{"id":"116d1501-cdea-4420-81b9-15c8e4ae03cf","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[1408,-480],"parameters":{"color":7,"width":192,"height":192,"content":"### Configure Azure OpenAI Settings\nIn the \"Configure Select AI Settings\" node, update the selectAIConfig object"},"typeVersion":1},{"id":"0cda7158-5ab5-4200-b981-a3c93eb07ad3","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-160,-480],"parameters":{"color":7,"width":208,"height":192,"content":"### File Size Limits\nAdd validation in \"Validate & Normalize File\""},"typeVersion":1},{"id":"ef486a6f-d92d-4f91-9452-cebf5777543b","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1632,-480],"parameters":{"color":7,"width":192,"height":192,"content":"### Registers with select AI\nRegisters the data with Oracle Select AI for natural language querying powered by Azure OpenAI."},"typeVersion":1},{"id":"a01934f9-baa3-410b-8a4c-95168f3d4c9d","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2064,-480],"parameters":{"color":7,"width":224,"height":192,"content":"### Return Success Output:\nReturns { success, tableName, columns, rowCount, selectAIProfile }.\n**tableName** is passed to the chat workflow so Select AI knows which table to query."},"typeVersion":1},{"id":"7de15b6d-349c-45f2-ad06-4f6cd418c835","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[960,-480],"parameters":{"color":7,"width":192,"height":192,"content":"### Change Batch Size\n\nDefault: 50 rows per batch\nAdjust based on your data size and database performance"},"typeVersion":1},{"id":"fb61ac4b-49c0-4891-8edb-3da0fb813b62","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[-432,-960],"parameters":{"color":7,"width":512,"height":80,"content":"**This creates the Oracle table and Select AI profile needed for querying**"},"typeVersion":1},{"id":"7f17c42e-22de-4e8e-830b-1529f3850a04","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[2336,-384],"parameters":{"width":576,"height":272,"content":"### Expected Response\n{\n  \"success\": true,\n  \"tableName\": \"UPLOAD_EXCEL_20260209123456789\",\n  \"columns\": [\"ID\", \"NAME\", \"AGE\", \"CITY\", \"SALARY\"],\n  \"rowCount\": 150,\n  \"selectAIProfile\": \"EXCEL_AI\",\n  \"message\": \"Excel file successfully ingested and registered with Oracle Select AI\",\n  \"nextSteps\": [\n    \"Query your data using: SELECT AI EXCEL_AI your question here\",\n    \"Example: SELECT AI EXCEL_AI show me the top 10 records by salary\"\n  ]\n}"},"typeVersion":1},{"id":"93ce236e-ec12-4eb4-94d1-910ec8aebaa4","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[1040,368],"parameters":{"color":7,"width":272,"height":112,"content":"Invokes DBMS_CLOUD_AI.GENERATE with action='runsql' to translate the chat prompt into SQL, execute it on the Select AI–registered table, and return the result set."},"typeVersion":1},{"id":"4c9f113b-6dc8-4dd0-afea-b5134c66f5d8","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-432,-880],"parameters":{"color":5,"width":2752,"height":864,"content":"## Workflow A Flow:\n1. Webhook receives Excel file\n   ↓\n2. Validate & normalize file\n   ↓\n3. Extract data from Excel\n   ↓\n4. Infer schema (column names & types)\n   ↓\n5. Create Oracle table dynamically\n   ↓\n6. Insert data in batches (50 rows at a time)\n   ↓\n7. Configure Select AI settings\n   ↓\n8. Register table with Select AI\n   ↓\n9. Return success response"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"c2cd9245-4dbb-474c-b382-95de8ee1d4e5","connections":{"Chat Input":{"main":[[{"node":"Configure Select AI Profile","type":"main","index":0}]]},"Prepare Response":{"main":[[{"node":"Return Success","type":"main","index":0}]]},"Restore Data Rows":{"main":[[{"node":"Split into Batches","type":"main","index":0}]]},"Extract from Excel":{"main":[[{"node":"Infer Schema & Table Name","type":"main","index":0}]]},"Split into Batches":{"main":[[{"node":"Insert Rows into Oracle","type":"main","index":0}]]},"Create Oracle Table":{"main":[[{"node":"Split into Batches","type":"main","index":0},{"node":"Restore Data Rows","type":"main","index":0}]]},"Webhook - File Upload":{"main":[[{"node":"Validate & Normalize File","type":"main","index":0}]]},"Oracle Select AI Query":{"main":[[{"node":"Format Chat Response","type":"main","index":0}]]},"Insert Rows into Oracle":{"main":[[{"node":"Configure Select AI Settings","type":"main","index":0}]]},"Register with Select AI":{"main":[[{"node":"Prepare Response","type":"main","index":0}]]},"Infer Schema & Table Name":{"main":[[{"node":"Create Oracle Table","type":"main","index":0}]]},"Validate & Normalize File":{"main":[[{"node":"Extract from Excel","type":"main","index":0}]]},"Configure Select AI Profile":{"main":[[{"node":"Oracle Select AI Query","type":"main","index":0}]]},"Configure Select AI Settings":{"main":[[{"node":"Register with Select AI","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":28,"nodeTypes":{"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":12},"n8n-nodes-base.oracleDatabase":{"count":4},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.extractFromFile":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.chatTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Saumil Diwaker","username":"sdiwaker","bio":"Building practical n8n workflow templates that help people connect and automate tasks with Oracle Database and integrate Oracle Database and cloud services with external apps.","verified":false,"links":[""],"avatar":"https://gravatar.com/avatar/2df117c90ccb7ad02e09ca8696b100d95c68b27732b974c50d9ad7bfce5963d2?r=pg&d=retro&size=200"},"nodes":[{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1247,"icon":"fa:comments","name":"@n8n/n8n-nodes-langchain.chatTrigger","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/"}]},"categories":["Core Nodes","Langchain"]}},"group":"[\"trigger\"]","defaults":{"name":"When chat message received"},"iconData":{"icon":"comments","type":"icon"},"displayName":"Chat Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"},{"id":26,"name":"Langchain"}]},{"id":1318,"icon":"file:oracle.svg","name":"n8n-nodes-base.oracleDatabase","codex":{"data":{"categories":[]}},"group":"[\"input\"]","defaults":{"name":"Oracle Database"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPgo8c3ZnIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSI4MDBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGZpbGw9IiNGMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcuOTU3MzU5LDE4LjkxMjM2NjQgQzQuMTE2NzAyNTIsMTguOTEyMzY2NCAxLDE1LjgwMzQ1OCAxLDExLjk2MTczNzMgQzEsOC4xMjAwMDc3MyA0LjExNjcwMjUyLDUgNy45NTczNTksNSBMMTYuMDQzNzk0OCw1IEMxOS44ODU1MTU2LDUgMjMsOC4xMjAwMDc3MyAyMywxMS45NjE3MzczIEMyMywxNS44MDM0NTggMTkuODg1NTE1NiwxOC45MTIzNjY0IDE2LjA0Mzc5NDgsMTguOTEyMzY2NCBMNy45NTczNTksMTguOTEyMzY2NCBMNy45NTczNTksMTguOTEyMzY2NCBaIE0xNS44NjM5MTc2LDE2LjQ1ODU0ODggQzE4LjM1MjIwMSwxNi40NTg1NDg4IDIwLjM2NzQzOTcsMTQuNDQ4ODU4IDIwLjM2NzQzOTcsMTEuOTYxNzM3MyBDMjAuMzY3NDM5Nyw5LjQ3NDYwNTk1IDE4LjM1MjIwMSw3LjQ1MzgxOTM0IDE1Ljg2MzkxNzYsNy40NTM4MTkzNCBMOC4xMzYwODI0LDcuNDUzODE5MzQgQzUuNjQ4OTUyODUsNy40NTM4MTkzNCAzLjYzMjU1ODU1LDkuNDc0NjA1OTUgMy42MzI1NTg1NSwxMS45NjE3MzczIEMzLjYzMjU1ODU1LDE0LjQ0ODg1OCA1LjY0ODk1Mjg1LDE2LjQ1ODU0ODggOC4xMzYwODI0LDE2LjQ1ODU0ODggTDE1Ljg2MzkxNzYsMTYuNDU4NTQ4OCBMMTUuODYzOTE3NiwxNi40NTg1NDg4IFoiLz4KPC9zdmc+"},"displayName":"Oracle Database","typeVersion":1,"nodeCategories":[{"id":null,"name":null}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":48,"name":"AI RAG"}],"image":[]}}