Usuário com melhor resposta
Passar um parametro como ano na hora de executar uma procedure

Pergunta
-
Pessoal sou iniciante em sql e pl/sql.
Preciso criar uma procedure que na hora da sua execução eu informe o ano para a execução da mesma.
Exemplo:
exec proc_xpto 2016
Tentei algumas coisas aqui mais não consegui. Se alguém puder me ajudar eu agradeço muito.
Desde já obrigado;
Cleber
Respostas
-
CREATE PROCEDURE CALCULOS_DRE_UNIFICADO @id_ano int = null as DECLARE @command VARCHAR(500) IF @id_ano IS NULL BEGIN RAISERROR('O valor do campo @id_ano é obrigatorio',10,10); RETURN -1; END; EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS @id_ano EXEC ELT_CALCULO_DRE_02_CRIA_TABELA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_03_DROP_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_04_CRIA_TABELA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_05_DROPA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_06_CRIA_TABELA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_07_CRIA_TABELA_FATO_AEREO_TERRESTRE @id_ano EXEC ELT_CALCULO_DRE_08_CRIA_TABELA_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_09_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_PRINCIPAL @id_ano EXEC ELT_CALCULO_DRE_10_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_MES @id_ano EXEC ELT_CALCULO_DRE_11_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_ANO @id_ano EXEC ELT_CALCULO_DRE_12_CRIA_TABELA_FATO_HISTORICO_RAZAO_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_13_CARGA_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_14_CARGA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_16_CARGA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_17_CARGA_DIM_GRUPO_EMPRESA_NEW_AJUSTE_MENSAL_PARA_NOVAS_ENTIDADES @id_ano EXEC ELT_CALCULO_DRE_18_CRIA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_19_CARGA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_20_CARGA_DIM_AGRUPAMENTO_DE_CONTAS_AJUSTE_PARA_NOVAS_CONTAS @id_ano EXEC ELT_CALCULO_DRE_21_CARGA_FATO_AEREO_TERRESTRE_PASSO_1 @id_ano EXEC ELT_CALCULO_DRE_22_CARGA_FATO_AEREO_TERRESTRE_PASSO_2 @id_ano EXEC ELT_CALCULO_DRE_23_CARGA_PRINCIPAL_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_24_CARGA_ACUMULADO_MES_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_25_CARGA_ACUMULADO_ANO_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_26_CARGA_TABELA_HISTORICO_RAZAO_SYSFERA @id_ano GO
- Marcado como Resposta Cleber A. dos Santos quarta-feira, 4 de janeiro de 2017 13:44
-
Cara pelo que eu vi na sua SP , ela precisa de um entendimento mais avançado para manipular
Aconselho que antes de partir pro desenvolvimento em T-SQL vc leia
1)http://www.devmedia.com.br/stored-procedure-parametros-de-entrada-e-saida/18573
e assista as aulas do canal do youtube Bóson Treinamentos referentes a Procedure
em resumo ,me parece que todas suas SP que estão no EXEC
precisão de paramentos para ser executada ( vc talvez precise passar paramentos para essas)
1)Como saber se a SP precisa de Paramentos , a ordens do Paramentos e Tipos
Clique com o botão direito encima da procedure e clique em execute Stored Procedure
quando vc executa a procedure com os paramentos ela pode ou não devolver resultados
para isso vc deve guardar em uma temp table por exemplo para manipular.
mas o que vc precisa mesmo , pode ser mais detalhista ??
Wesley Neves
- Marcado como Resposta Cleber A. dos Santos quarta-feira, 4 de janeiro de 2017 13:44
Todas as Respostas
-
CREATE PROCEDURE [dbo].[XPTO] @ANO CHAR(4) = '1990'--VALOR DEFAULT PARA CASO NÃO PASSE (OPCIONAL) AS BEGIN SET NOCOUNT ON; --SEU COD AQUI, USE A VARIÁVEL @ANO PARA PEGAR A ENTRADA END
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Editado Kanaãm Luz Romero Rodrigues terça-feira, 3 de janeiro de 2017 20:18
-
é isso que preciso fazer?
Explicando um pouco mais o que eu preciso... essa minha proc deverá chamar um conjunto de outras procs listadas abaixo.
CREATE PROC CALCULOS_DRE_UNIFICADO ( @id_ano int = null ) as
Aqui eu precisava fazer uma validação para que for executar sempre puder informar o ano que
precisar. Travei aqui
declare @command varchar(500)
declare @id_ano varchar(4)
if @id_ano is null
begin....
end
EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS; EXEC ELT_CALCULO_DRE_02_CRIA_TABELA_DIM_DATA_NEW; EXEC ELT_CALCULO_DRE_03_DROP_VIEW_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_04_CRIA_TABELA_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_05_DROPA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_06_CRIA_TABELA_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_07_CRIA_TABELA_FATO_AEREO_TERRESTRE; EXEC ELT_CALCULO_DRE_08_CRIA_TABELA_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_09_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_PRINCIPAL; EXEC ELT_CALCULO_DRE_10_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_MES; EXEC ELT_CALCULO_DRE_11_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_ANO; EXEC ELT_CALCULO_DRE_12_CRIA_TABELA_FATO_HISTORICO_RAZAO_SYSFERA; EXEC ELT_CALCULO_DRE_13_CARGA_SYSFERA; EXEC ELT_CALCULO_DRE_14_CARGA_DIM_DATA_NEW; EXEC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_16_CARGA_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_17_CARGA_DIM_GRUPO_EMPRESA_NEW_AJUSTE_MENSAL_PARA_NOVAS_ENTIDADES; EXEC ELT_CALCULO_DRE_18_CRIA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_19_CARGA_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_20_CARGA_DIM_AGRUPAMENTO_DE_CONTAS_AJUSTE_PARA_NOVAS_CONTAS; EXEC ELT_CALCULO_DRE_21_CARGA_FATO_AEREO_TERRESTRE_PASSO_1; EXEC ELT_CALCULO_DRE_22_CARGA_FATO_AEREO_TERRESTRE_PASSO_2; EXEC ELT_CALCULO_DRE_23_CARGA_PRINCIPAL_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_24_CARGA_ACUMULADO_MES_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_25_CARGA_ACUMULADO_ANO_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_26_CARGA_TABELA_HISTORICO_RAZAO_SYSFERA; end
- Editado Cleber A. dos Santos terça-feira, 3 de janeiro de 2017 21:09
-
Acredito que seja algo assim
CREATE PROC CALCULOS_DRE_UNIFICADO ( @id_ano INT = NULL ) AS /* Aqui eu precisava fazer uma validação para que for executar sempre puder informar o ano que precisar. Travei aqui */ DECLARE @command VARCHAR(500); IF @id_ano IS NULL BEGIN RAISERROR('O valor do campo @id_ano é obrigatorio',10,10); RETURN -1; END; EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS; EXEC ELT_CALCULO_DRE_02_CRIA_TABELA_DIM_DATA_NEW; EXEC ELT_CALCULO_DRE_03_DROP_VIEW_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_04_CRIA_TABELA_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_05_DROPA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_06_CRIA_TABELA_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_07_CRIA_TABELA_FATO_AEREO_TERRESTRE; EXEC ELT_CALCULO_DRE_08_CRIA_TABELA_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_09_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_PRINCIPAL; EXEC ELT_CALCULO_DRE_10_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_MES; EXEC ELT_CALCULO_DRE_11_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_ANO; EXEC ELT_CALCULO_DRE_12_CRIA_TABELA_FATO_HISTORICO_RAZAO_SYSFERA; EXEC ELT_CALCULO_DRE_13_CARGA_SYSFERA; EXEC ELT_CALCULO_DRE_14_CARGA_DIM_DATA_NEW; EXEC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_16_CARGA_DIM_GRUPO_EMPRESA_NEW; EXEC ELT_CALCULO_DRE_17_CARGA_DIM_GRUPO_EMPRESA_NEW_AJUSTE_MENSAL_PARA_NOVAS_ENTIDADES; EXEC ELT_CALCULO_DRE_18_CRIA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_19_CARGA_DIM_AGRUPAMENTO_DE_CONTAS; EXEC ELT_CALCULO_DRE_20_CARGA_DIM_AGRUPAMENTO_DE_CONTAS_AJUSTE_PARA_NOVAS_CONTAS; EXEC ELT_CALCULO_DRE_21_CARGA_FATO_AEREO_TERRESTRE_PASSO_1; EXEC ELT_CALCULO_DRE_22_CARGA_FATO_AEREO_TERRESTRE_PASSO_2; EXEC ELT_CALCULO_DRE_23_CARGA_PRINCIPAL_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_24_CARGA_ACUMULADO_MES_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_25_CARGA_ACUMULADO_ANO_FATO_APP1_NEW; EXEC ELT_CALCULO_DRE_26_CARGA_TABELA_HISTORICO_RAZAO_SYSFERA;
Wesley Neves
-
Quando eu tento executar da essa mensagem:
Msg 8199, Level 16, State 1, Line 3
In EXECUTE <procname>, procname can only be a literal or variable of type char, varchar, nchar, or nvarchar.Essa mensagem se repete para todas as procedures que eu tento chamar.
Help please.
-
-
-
-
CREATE PROCEDURE CALCULOS_DRE_UNIFICADO @id_ano int = null as DECLARE @command VARCHAR(500) IF @id_ano IS NULL BEGIN RAISERROR('O valor do campo @id_ano é obrigatorio',10,10); RETURN -1; END; EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS @id_ano EXEC ELT_CALCULO_DRE_02_CRIA_TABELA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_03_DROP_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_04_CRIA_TABELA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_05_DROPA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_06_CRIA_TABELA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_07_CRIA_TABELA_FATO_AEREO_TERRESTRE @id_ano EXEC ELT_CALCULO_DRE_08_CRIA_TABELA_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_09_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_PRINCIPAL @id_ano EXEC ELT_CALCULO_DRE_10_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_MES @id_ano EXEC ELT_CALCULO_DRE_11_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_ANO @id_ano EXEC ELT_CALCULO_DRE_12_CRIA_TABELA_FATO_HISTORICO_RAZAO_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_13_CARGA_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_14_CARGA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_16_CARGA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_17_CARGA_DIM_GRUPO_EMPRESA_NEW_AJUSTE_MENSAL_PARA_NOVAS_ENTIDADES @id_ano EXEC ELT_CALCULO_DRE_18_CRIA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_19_CARGA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_20_CARGA_DIM_AGRUPAMENTO_DE_CONTAS_AJUSTE_PARA_NOVAS_CONTAS @id_ano EXEC ELT_CALCULO_DRE_21_CARGA_FATO_AEREO_TERRESTRE_PASSO_1 @id_ano EXEC ELT_CALCULO_DRE_22_CARGA_FATO_AEREO_TERRESTRE_PASSO_2 @id_ano EXEC ELT_CALCULO_DRE_23_CARGA_PRINCIPAL_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_24_CARGA_ACUMULADO_MES_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_25_CARGA_ACUMULADO_ANO_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_26_CARGA_TABELA_HISTORICO_RAZAO_SYSFERA @id_ano GO
- Marcado como Resposta Cleber A. dos Santos quarta-feira, 4 de janeiro de 2017 13:44
-
Cara pelo que eu vi na sua SP , ela precisa de um entendimento mais avançado para manipular
Aconselho que antes de partir pro desenvolvimento em T-SQL vc leia
1)http://www.devmedia.com.br/stored-procedure-parametros-de-entrada-e-saida/18573
e assista as aulas do canal do youtube Bóson Treinamentos referentes a Procedure
em resumo ,me parece que todas suas SP que estão no EXEC
precisão de paramentos para ser executada ( vc talvez precise passar paramentos para essas)
1)Como saber se a SP precisa de Paramentos , a ordens do Paramentos e Tipos
Clique com o botão direito encima da procedure e clique em execute Stored Procedure
quando vc executa a procedure com os paramentos ela pode ou não devolver resultados
para isso vc deve guardar em uma temp table por exemplo para manipular.
mas o que vc precisa mesmo , pode ser mais detalhista ??
Wesley Neves
- Marcado como Resposta Cleber A. dos Santos quarta-feira, 4 de janeiro de 2017 13:44
-
bom dia Wesley, obrigado pelas dicas... vou tentar explicar melhor o q preciso fazer.
Foram criadas varias SP para carregar um ETL feito de SP...
em todas SP é passada a seguinte instrução na hora que foram criadas.
CREATE PROC ELT_CALCULO_DRE_01_CRIA_TABELAS ( @id_ano int ) as
cada SP dessas fazem varias coisas, como create table, insert, delete, create view, essa SP unificada que estou tentando fazer é para o meu chefe não ter que executar uma a uma na sequencia.
Preciso que a minha SP unificada chame todas as demais simplesmente passando o parâmetro ano...
exemplo: exec etl_calculos_dre_unificado 2016, onde é o ano que ele deseja carregar as informações deste elt.
Mais uma vez agradeço o apoio e paciência em me ajudar.
-
Adiciona na frente do comando para executar a procedure a variável
EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS @id_ano
CREATE PROCEDURE CALCULOS_DRE_UNIFICADO @id_ano int = null as DECLARE @command VARCHAR(500) IF @id_ano IS NULL BEGIN RAISERROR('O valor do campo @id_ano é obrigatorio',10,10); RETURN -1; END; EXEC ELT_CALCULO_DRE_01_CRIA_TABELAS @id_ano EXEC ELT_CALCULO_DRE_02_CRIA_TABELA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_03_DROP_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_04_CRIA_TABELA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_05_DROPA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_06_CRIA_TABELA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_07_CRIA_TABELA_FATO_AEREO_TERRESTRE @id_ano EXEC ELT_CALCULO_DRE_08_CRIA_TABELA_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_09_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_PRINCIPAL @id_ano EXEC ELT_CALCULO_DRE_10_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_MES @id_ano EXEC ELT_CALCULO_DRE_11_CRIA_FATO_APP1_NEW_TABELAS_AUXILIARES_ACUMULADO_ANO @id_ano EXEC ELT_CALCULO_DRE_12_CRIA_TABELA_FATO_HISTORICO_RAZAO_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_13_CARGA_SYSFERA @id_ano EXEC ELT_CALCULO_DRE_14_CARGA_DIM_DATA_NEW @id_ano EXEC ELT_CALCULO_DRE_15_CRIA_VIEW_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_16_CARGA_DIM_GRUPO_EMPRESA_NEW @id_ano EXEC ELT_CALCULO_DRE_17_CARGA_DIM_GRUPO_EMPRESA_NEW_AJUSTE_MENSAL_PARA_NOVAS_ENTIDADES @id_ano EXEC ELT_CALCULO_DRE_18_CRIA_VIEW_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_19_CARGA_DIM_AGRUPAMENTO_DE_CONTAS @id_ano EXEC ELT_CALCULO_DRE_20_CARGA_DIM_AGRUPAMENTO_DE_CONTAS_AJUSTE_PARA_NOVAS_CONTAS @id_ano EXEC ELT_CALCULO_DRE_21_CARGA_FATO_AEREO_TERRESTRE_PASSO_1 @id_ano EXEC ELT_CALCULO_DRE_22_CARGA_FATO_AEREO_TERRESTRE_PASSO_2 @id_ano EXEC ELT_CALCULO_DRE_23_CARGA_PRINCIPAL_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_24_CARGA_ACUMULADO_MES_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_25_CARGA_ACUMULADO_ANO_FATO_APP1_NEW @id_ano EXEC ELT_CALCULO_DRE_26_CARGA_TABELA_HISTORICO_RAZAO_SYSFERA @id_ano GO
-
Nesse Caso veja o que o Carlos_rodrigues postou ,acredito que seja dessa forma.
Agora como vc vai fazer para agregar os retornos de cada uma ??
ou não precisa.
Wesley Neves
-