# EXEC

> EXEC en StackQL: llamar directamente a un método de recurso de un provider, con indicaciones de consulta para devolver resultados o esperar a que termine, como iniciar o detener una instancia.

Source: https://stackql.io/es/language-spec/exec

Ejecuta un método de recurso de un provider (procedimiento integrado).  

Consulte también:  
[[ Jerarquía de recursos de StackQL ]](/getting-started/resource-hierarchy)

* * * 

## Sintaxis

*execStatement::=*

&nbsp;  
&nbsp;

```sql
EXEC [ queryHint ] <multipartIdentifier>.<methodName> [ <methodArguments> ];
```

## Indicaciones de consulta

Las indicaciones de consulta admitidas para el comando `EXEC` se resumen a continuación:  

| Indicación           | Descripción                                                                                                                                                                |
|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `/*+ SHOWRESULTS */` | Devuelve el conjunto de resultados, está pensada para métodos que devuelven datos; no obstante, use `SELECT` si es posible.                                                |
| `/*+ AWAIT  */`      | Hace que la operación sea bloqueante (síncrona), permite controlar el script en operaciones de larga duración (por ejemplo, operaciones de mutación). Nota: no se admite en todos los providers |

* * *

## Ejemplos

### Detener una instancia de Google Compute Engine
Ejecute una instrucción `EXEC` para detener una instancia de Compute Engine en ejecución en una sesión autenticada.

```sql
-- Stop a running Compute Engine resource instance
EXEC google.compute.instances.stop 
@instance = 'demo-instance-1', 
@project = 'stackql-demo', 
@zone = 'australia-southeast1-a';
```

### Iniciar una instancia de Google Compute Engine (opción síncrona)
Ejecute una instrucción `EXEC` para iniciar una instancia de Compute Engine detenida en una sesión autenticada; se usa la indicación de consulta `/*+ AWAIT  */` para que la operación sea bloqueante (síncrona).

```sql
-- Start a stopped Compute Engine resource instance
EXEC /*+ AWAIT  */ google.compute.instances.stop 
@instance = 'demo-instance-1', 
@project = 'stackql-demo', 
@zone = 'australia-southeast1-a';
```

### Iniciar y detener una instancia de AWS EC2
Ejecute una instrucción `EXEC` para iniciar una instancia de AWS EC2 en una sesión autenticada.

```sql
-- Start an EC2 instance
EXEC aws.ec2.instances.start_instances 
@InstanceId = 'i-0fc989cf4efcd8b88', 
@region = 'ap-southeast-2';
-- Stop an EC2 instance
EXEC aws.ec2.instances.stop_instances 
@InstanceId = 'i-0fc989cf4efcd8b88', 
@region = 'ap-southeast-2';
```

### Conectar un disco a una instancia de Google Compute Engine
Ejecute una instrucción `EXEC` para conectar un disco a una instancia de Compute Engine en una sesión autenticada.

```sql
-- Attach a Disk resource to a Compute Engine instance
EXEC google.compute.instances.attachDisk 
@zone='australia-southeast1-a', 
@project='stackql-demo', 
@instance='demo-instance-1' 
@@json=
'{
"source": "projects/stackql-demo/zones/australia-southeast1-a/disks/test10gbdisk2", 
"boot": false 
}';
```

### Simular la expulsión de una VM de Azure Spot
Ejecute una instrucción `EXEC` para simular la expulsión de una instancia de VM de Azure Spot.

```sql
exec azure.compute.virtual_machines.simulate_eviction
@subscription_id = '0123456789',
@resource_group_name = 'vmss-flex',
@vm_name = 'vmss-flex-manual-1';
```
