Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.
ctx.sql
ctx.sql fornece capacidades de execução e gerenciamento de SQL, comumente usado em RunJS (como JSBlock e fluxos de eventos) para acessar o banco de dados diretamente. Suporta execução de SQL temporário, execução de modelos SQL salvos por ID, vinculação de parâmetros (binding), variáveis de modelo ({{ctx.xxx}}) e controle do tipo de resultado.
Cenários de Uso
Nota:
ctx.sqlacessa o banco de dados via APIflowSql. Certifique-se de que o usuário atual tenha permissões de execução para a fonte de dados correspondente.
Permissões
A lógica de frontend destinada a usuários comuns deve usar ctx.sql.runById(uid, options). Quando for necessário SQL dinâmico ou gerenciamento de modelos, certifique-se de que a função (role) atual possua permissões de configuração SQL.
Definição de Tipo
Métodos Comuns
Nota:
runé usado para depuração de SQL e requer permissões de configuração.saveedestroysão usados para gerenciar modelos SQL e requerem permissões de configuração.runByIdé aberto a usuários comuns; ele só pode executar modelos salvos e não permite depurar ou modificar o SQL.- Quando um modelo SQL é modificado,
savedeve ser chamado para persistir as alterações.
Parâmetros
options para run / runById
options para save
Variáveis de Modelo SQL e Vinculação de Parâmetros
Variáveis de Modelo {{ctx.xxx}}
Você pode usar {{ctx.xxx}} no SQL para referenciar variáveis de contexto. Elas são resolvidas em valores reais antes da execução:
As fontes para variáveis referenciáveis são as mesmas de ctx.getVar() (ex: ctx.user.*, ctx.record.*, ctx.defineProperty personalizado, etc.).
Vinculação de Parâmetros (Parameter Binding)
- Parâmetros Nomeados: Use
:nameno SQL e passe um objeto{ name: value }embind. - Parâmetros Posicionais: Use
?no SQL e passe um array[value1, value2]embind.
Exemplos
Executando SQL Temporário (Requer Permissão de Configuração SQL)
Usando Variáveis de Modelo
Salvando e Reutilizando Modelos
Lista Paginada (SQLResource)
Relacionamento com ctx.resource e ctx.request
ctx.sql encapsula a API flowSql e é especializado para cenários SQL; ctx.request pode ser usado para chamar qualquer API.
Observações
- Use vinculação de parâmetros (
:name/?) em vez de concatenação de strings para evitar injeção de SQL (SQL injection). type: 'selectVar'retorna um valor escalar, normalmente usado paraCOUNT,SUM, etc.- Variáveis de modelo
{{ctx.xxx}}são resolvidas antes da execução; certifique-se de que as variáveis correspondentes estejam definidas no contexto.
Relacionado
- ctx.resource: Recursos de dados; o SQLResource chama a API
flowSqlinternamente. - ctx.initResource(): Inicializa o SQLResource para listas paginadas, etc.
- ctx.request(): Requisições HTTP gerais.

