---
title: Makra SQL
description: Używaj ponownie wyrażeń SQL ze współdzielonej biblioteki makr i poznaj moment wstrzykiwania makra.
species: guide
---
# Makra SQL

Wywołuj współdzielone makro tak jak każdą inną funkcję SQL. Supernova wstrzykuje definicję makra tylko wtedy, gdy zapytanie odwołuje się do jego nazwy, dzięki czemu niezwiązane zapytania pozostają bez zmian.

```sql
select
  id,
  initcap(lower(property_company)) as company_name
from titan.hubspot.contacts
where not _deleted
```

## Współdzielona biblioteka

Współdzielone makra znajdują się w `src/queries/macros/`. Nazwa pliku jest nazwą wywoływaną. Bieżące makro `initcap` dzieli tekst na słowa, zmienia pierwszy znak każdego słowa na wielką literę, pozostałe na małe i łączy części.

Definicja używa zwykłej składni dialektu:

```sql
create macro initcap(text) as
  list_reduce(
    list_transform(
      regexp_extract_all(text, '(\w+\W*)'),
      word -> upper(word[1]) || lower(word[2:])
    ),
    (left_value, right_value) -> left_value || right_value,
    ''
  );
```

## Rozwiązywanie

Makra są wykrywane przed wykonaniem zapytania. Odwołanie do `initcap(` wczytuje tę definicję dla sesji. Nazwy makr nie stają się tabelami jeziora, a ich definicje nie mogą uzyskać dostępu do innej organizacji.

Użyj [funkcji z typami](/docs/typesql/macros-and-functions), gdy kod wywołujący wymaga kontraktów parametrów i wartości zwrotnej. Makro SQL nadal sprawdza się w istniejących pomocniczych funkcjach bez typów i zapewnia zgodność ze składnią DuckDB.
