﻿---
sidebar_position: 4
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Execute SQL query
 Executes an arbitrary SQL query



`Function ExecuteSQLQuery(Val QueryText, Val Parameters = "", Val ForceResult = False, Val Connection = "") Export`

  | Parameter | CLI option | Type | Required | Description |
  |-|-|-|-|-|
  | QueryText | --sql | String | &#x2714; | Database query text |
  | Parameters | --params | Array Of Arbitrary | &#x2716; | Array of positional parameters of the request |
  | ForceResult | --force | Boolean | &#x2716; | Includes an attempt to retrieve the result, even for nonSELECT queries |
  | Connection | --dbc | String, Arbitrary | &#x2716; | Connection or connection string |

  
  Returns:  Structure Of KeyAndValue - Result of query execution

<br/>

:::tip
Available parameter types: String, Number, Date, Boolean, BinaryData. Binary data can also be passed as a `{'blob':File path}` structure. Binary data (BLOB) values are returned as `{'blob':Base64 string}`

Without specifying the `ForcifyResult` flag, result data is returned only for queries beginning with `SELECT` keyword For other queries, `result:true` or `false` with error text is returned
:::
<br/>



```bsl title="1C:Enterprise/OneScript code example"
    Image = "https://api.athenaeum.digital/test_data/picture.jpg";
    OPI_TypeConversion.GetBinaryData(Image); // Image - Type: BinaryData

    Address  = "93.125.42.204";
    Login    = "bayselonarrend";
    Password = "12we...";
    Base     = "test_data";

    ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
    Connection       = OPI_PostgreSQL.CreateConnection(ConnectionString);

    // CREATE

    QueryText = "
    |CREATE TABLE test_table (
    |id SERIAL PRIMARY KEY,
    |name NAME,
    |age INT,
    |salary REAL,
    |is_active BOOL,
    |created_at DATE,
    |data BYTEA
    |);";

    Result = OPI_PostgreSQL.ExecuteSQLQuery(QueryText, , , Connection);

    // INSERT with parameters

    QueryText = "
    |INSERT INTO test_table (name, age, salary, is_active, created_at, data)
    |VALUES ($1, $2, $3, $4, $5, $6);";

    ParameterArray = New Array;
    ParameterArray.Add(New Structure("NAME" , "Vitaly"));
    ParameterArray.Add(New Structure("INT"  , 25));
    ParameterArray.Add(New Structure("REAL" , 1000.12));
    ParameterArray.Add(New Structure("BOOL" , True));
    ParameterArray.Add(New Structure("DATE" , OPI_Tools.GetCurrentDate()));
    ParameterArray.Add(New Structure("BYTEA", Image));

    Result = OPI_PostgreSQL.ExecuteSQLQuery(QueryText, ParameterArray, , Connection);

    // SELECT (The result of this query is shown in the Result block)

    QueryText = "SELECT id, name, age, salary, is_active, created_at, data FROM test_table;";

    Result = OPI_PostgreSQL.ExecuteSQLQuery(QueryText, , , Connection);

    // DO + Transaction

    QueryText = "DO $$
    |BEGIN
    | CREATE TABLE users (
    | id SMALLSERIAL,
    | name TEXT NOT NULL,
    | age INT NOT NULL
    | );
    | INSERT INTO users (name, age) VALUES ('Alice', 30);
    | INSERT INTO users (name, age) VALUES ('Bob', 25);
    | INSERT INTO users (name, age) VALUES ('Charlie', 35);
    | COMMIT;
```
 




