Welington Pereira
Desenvolvedor Full Stack & Consultor
Especialista em linguagens de programação e banco de dados. Compartilhando dicas de programação práticas, tutoriais e soluções para o dia a dia do desenvolvedor.
Desenvolvedor Full Stack & Consultor
Especialista em linguagens de programação e banco de dados. Compartilhando dicas de programação práticas, tutoriais e soluções para o dia a dia do desenvolvedor.
Opção Recomendada: ASP.NET Core Web API (API Web do ASP.NET Core)
A forma mais direta é criar um projeto já configurado para API REST. Veja o passo a passo:
1. Abra o Visual Studio 2022
2. Clique em "Criar um novo projeto"
3. Pesquise por "ASP.NET Core Web API"
4. Escolha o template e clique em Avançar
5. Configure o nome e local do projeto
6. Na próxima tela, selecione:
o .NET 8 (LTS mais recente)
o Marque "Use controllers" se quiser o padrão MVC, ou deixe desmarcado para usar Minimal APIs
o Marque "Enable OpenAPI support" para ter o Swagger já configurado
Esse template já vem com tudo pronto: controller de exemplo, Swagger, configurações de CORS, etc.
Projeto Vazio com C# — Vale a pena?
Tecnicamente é possível, mas não recomendo para quem está começando ou quer agilidade. Você teria que configurar manualmente o middleware, injeção de dependência, roteamento, etc. Dá mais trabalho sem nenhum ganho real.
O que você ganha com o template Web API
Com o projeto gerado, você já tem uma estrutura como:
• Controllers/ → onde ficam seus endpoints
• Program.cs → configuração da aplicação
• appsettings.json → configurações como connection string
• Swagger disponível em /swagger ao rodar o projeto
Dica importante
Se for uma API mais simples ou moderna, o Visual Studio 2022 também oferece o template de Minimal API, que é mais enxuto e sem controllers, tudo em Program.cs. Para projetos maiores e em equipe, prefira a abordagem com Controllers.
Quer que eu te ajude com os próximos passos, como criar um CRUD completo ou conectar a um banco de dados?
ASP.NET CORE API WEB (Native AOT)
O Native AOT compila o projeto diretamente para código nativo, o que traz inicialização mais rápida e menor uso de memória. Porém tem limitações importantes:
• Não suporta reflection (o que quebra muitas libs populares como Entity Framework, AutoMapper, Newtonsoft.Json, etc.)
• Mais restrito e complexo de configurar
• Indicado para cenários muito específicos de alta performance, como microsserviços em containers
Resumindo API Web do ASP.NET x Core Native AOT
API Web do ASP.NET
Facilidade ✅ Alta
Compatibilidade com libs ✅ Total
Performance de startup Normal
Recomendado para iniciantes ✅ Sim
Core Native AOT
Facilidade ❌ Complexo
Compatibilidade com libs ⚠️ Limitada
Performance de startup Muito alta
Recomendado para iniciantes ❌ Não
Facilidade ✅ Alta ❌ Complexo
Compatibilidade com libs ✅ Total ⚠️ Limitada
Performance de startup Normal Muito alta
Recomendado para iniciantes ✅ Sim ❌ Não
No Android Studio, abra o Terminal. Para acessar o Terminal (View > Tool Windows > Terminal).
Em seguida digite: & "C:\Program Files\Android\Android Studio\jbr\bin\keytool.exe" -list -v -alias androiddebugkey -keystore "$env:USERPROFILE\.android\debug.keystore" -storepass android -keypass android
O certificado SHA1 será exibido.
Espero ter ajudado e até a próxima.
<<FETCH_LEITURA>> é um LABEL (rótulo) em PL/SQL.
Significado:
É um marcador/etiqueta que identifica um ponto específico no código
A sintaxe é: <<nome_do_label>>
Para que serve:
Documentação/Organização: Identificar visualmente seções do código
Referência em comandos GOTO: Permitir saltos para esse ponto (má prática)
Identificar loops: Dar nome a um loop específico para usar em EXIT ou CONTINUE
Neste código:
sqlLOOP
<<FETCH_LEITURA>>
V_DEB_LIDO := V_DEB_LIDO + 1;
FETCH c_IMO_LOCALID INTO ...
O label <<FETCH_LEITURA>> está apenas documentando onde começa a leitura do cursor. Não está sendo usado para nenhuma funcionalidade (não há GOTO, EXIT ou CONTINUE referenciando ele).
EXEMPLOS:
SELECT convert(datetime, 'Oct 23 2012 11:01AM', 100) -- mon dd yyyy hh:mmAM (or PM)
SELECT convert(datetime, 'Oct 23 2012 11:01AM') -- 2012-10-23 11:01:00.000
-- Without century (yy) string date conversion - convert string to datetime function
SELECT convert(datetime, 'Oct 23 12 11:01AM', 0) -- mon dd yy hh:mmAM (or PM)
SELECT convert(datetime, 'Oct 23 12 11:01AM') -- 2012-10-23 11:01:00.000
-- Convert string to datetime sql - convert string to date sql - sql dates format
-- T-SQL convert string to datetime - SQL Server convert string to date
SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd ANSI date with century
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
-- mon types are nondeterministic conversions, dependent on language setting
SELECT convert(datetime, '23 OCT 2016', 106) -- dd mon yyyy
SELECT convert(datetime, 'Oct 23, 2016', 107) -- mon dd, yyyy
-- 2016-10-23 00:00:00.000
SELECT convert(datetime, '20:10:44', 108) -- hh:mm:ss
-- 1900-01-01 20:10:44.000
-- mon dd yyyy hh:mm:ss:mmmAM (or PM) - sql time format - SQL Server datetime format
SELECT convert(datetime, 'Oct 23 2016 11:02:44:013AM', 109)
-- 2016-10-23 11:02:44.013
SELECT convert(datetime, '10-23-2016', 110) -- mm-dd-yyyy
SELECT convert(datetime, '2016/10/23', 111) -- yyyy/mm/dd
-- YYYYMMDD ISO date format works at any language setting - international standard
SELECT convert(datetime, '20161023')
SELECT convert(datetime, '20161023', 112) -- ISO yyyymmdd
-- 2016-10-23 00:00:00.000
SELECT convert(datetime, '23 Oct 2016 11:02:07:577', 113) -- dd mon yyyy hh:mm:ss:mmm
-- 2016-10-23 11:02:07.577
SELECT convert(datetime, '20:10:25:300', 114) -- hh:mm:ss:mmm(24h)
-- 1900-01-01 20:10:25.300
SELECT convert(datetime, '2016-10-23 20:44:11', 120) -- yyyy-mm-dd hh:mm:ss(24h)
-- 2016-10-23 20:44:11.000
SELECT convert(datetime, '2016-10-23 20:44:11.500', 121) -- yyyy-mm-dd hh:mm:ss.mmm
-- 2016-10-23 20:44:11.500
-- Style 126 is ISO 8601 format: international standard - works with any language setting
SELECT convert(datetime, '2008-10-23T18:52:47.513', 126) -- yyyy-mm-ddThh:mm:ss(.mmm)
-- 2008-10-23 18:52:47.513
SELECT convert(datetime, N'23 شوال 1429 6:52:47:513PM', 130) -- Islamic/Hijri date
SELECT convert(datetime, '23/10/1429 6:52:47:513PM', 131) -- Islamic/Hijri date
-- Convert DDMMYYYY format to datetime - sql server to date / datetime
SELECT convert(datetime, STUFF(STUFF('31012016',3,0,'-'),6,0,'-'), 105)
-- 2016-01-31 00:00:00.000
-- SQL Server T-SQL string to datetime conversion without century - some exceptions
-- nondeterministic means language setting dependent such as Mar/Mär/mars/márc
SELECT convert(datetime, 'Oct 23 16 11:02:44AM') -- Default
SELECT convert(datetime, '10/23/16', 1) -- mm/dd/yy U.S.
SELECT convert(datetime, '16.10.23', 2) -- yy.mm.dd ANSI
SELECT convert(datetime, '23/10/16', 3) -- dd/mm/yy UK/FR
SELECT convert(datetime, '23.10.16', 4) -- dd.mm.yy German
SELECT convert(datetime, '23-10-16', 5) -- dd-mm-yy Italian
SELECT convert(datetime, '23 OCT 16', 6) -- dd mon yy non-det.
SELECT convert(datetime, 'Oct 23, 16', 7) -- mon dd, yy non-det.
SELECT convert(datetime, '20:10:44', 8) -- hh:mm:ss
SELECT convert(datetime, 'Oct 23 16 11:02:44:013AM', 9) -- Default with msec
SELECT convert(datetime, '10-23-16', 10) -- mm-dd-yy U.S.
SELECT convert(datetime, '16/10/23', 11) -- yy/mm/dd Japan
SELECT convert(datetime, '161023', 12) -- yymmdd ISO
SELECT convert(datetime, '23 Oct 16 11:02:07:577', 13) -- dd mon yy hh:mm:ss:mmm EU dflt
SELECT convert(datetime, '20:10:25:300', 14) -- hh:mm:ss:mmm(24h)
SELECT convert(datetime, '2016-10-23 20:44:11',20) -- yyyy-mm-dd hh:mm:ss(24h) ODBC can.
SELECT convert(datetime, '2016-10-23 20:44:11.500', 21)-- yyyy-mm-dd hh:mm:ss.mmm ODBC
Espero que seja útil. E até a próxima dica.
Para pular os 50 primeiros registros em Oracle PL/SQL, você pode usar a cláusula `OFFSET` junto com `FETCH` (disponível a partir do Oracle 12c).
Aqui está um exemplo prático:
sql
SELECT *
FROM minha_tabela
ORDER BY id
OFFSET 50 ROWS FETCH NEXT 100 ROWS ONLY;
```
Explicação:
- `ORDER BY id` → é **obrigatório** para garantir a ordem dos registros.
- `OFFSET 50 ROWS` → ignora os primeiros 50 registros.
- `FETCH NEXT 100 ROWS ONLY` → retorna os próximos 100 registros (pode ajustar conforme necessário).
### Se estiver em versão anterior ao Oracle 12c (sem suporte a `OFFSET`):
Você pode usar uma subquery com `ROWNUM`:
sql
SELECT *
FROM (
SELECT t.*, ROWNUM r
FROM (
SELECT * FROM minha_tabela ORDER BY id
) t
WHERE ROWNUM <= 150
)
WHERE r > 50;
```
- Aqui, a subquery interna ordena os dados.
- O filtro `ROWNUM <= 150` garante que só pegue até o registro 150.
- O filtro externo `r > 50` remove os primeiros 50.