JhonyMega 0 Denunciar post Postado Outubro 14, 2010 :( http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Bom pessoal sou novo no ORACLE e to tendo muitas dificuldades com coisas simples .... Bom la vai a de hoje ... to fazendo uma procedure que vai concatenando a cada parametro que e NOT NULL mas não consigo execultar a string concatenando na procedure. Bom sei que no SQL SERVER ficaria assim: CREATE PROCEDURE dbo.nomeProcedure ( @parametro_01 varchar(100), @parametro_02 int, ) DECLARE @query varchar(1000) DECLARE @conf int SET @query = 'SELECT CAMPO_01, campo_02, campo_03 FROM tabelaA ' SET @conf = 0 if(parametro_01 IS NOT NULL) BEGIN SET @query = @query + ' WHERE CAMPO_A = ' + @parametro_01; SET @conf = 1 END IF(@parametro_02 IS NOT NULL) BEGIN IF(@conf = 0) BEGIN SET @query = @query + ' WHERE CAMPO_B = ' + @parametro_02; END ELSE BEGIN SET @query = @query + ' AND CAMPO_B = ' + @parametro_02; END END EXECUTE(@query) E pronto era só resgatar o valor e usar na aplicação. Mas no ORACLE não consigo executar SELECT simples e muito menos este tipo de PROCEDURE se puderem me AJUDAR e deixar ums exemplos. :) :) Compartilhar este post Link para o post Compartilhar em outros sites
Tiago Thiesen 0 Denunciar post Postado Outubro 14, 2010 Bom dia, Amigo tente utilizar o IS NOT NULL dentro da peopria query, exemplo: SELECT * FROM tabela WHERE TRIM(campo) IS NOT NULL Ou se deseja retornar um valor para campos nulos dê uma olhada na função NVL. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Outubro 14, 2010 Veja se isto te ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
JhonyMega 0 Denunciar post Postado Outubro 15, 2010 Veja se isto te ajuda. Não consegui entender os exemplos que você passol ... Bom o que preciso e usar uma variavel VARCHAR com um SELECT dentro e executalo na procedure ... assim retornando o resultado do SELECT. Se puder colocar um exemplo como comentario ficaria grato ... Compartilhar este post Link para o post Compartilhar em outros sites
Ferr 0 Denunciar post Postado Outubro 15, 2010 Prezado, boa tarde. Pelo que vejo você está começando a conhecer o Oracle e está acostumado ao MSSQL. você já deve ter notado algumas diferenças entre ambos (algumas realmente são exasperantes) mas vamos lá. Quando estiver trabalhando com Procedures, Triggers ou Funtions 1 - você não precisa iniciar suas variaveis por @, mas aconselho a adotar um padrão para identificá-las para não causar confusão com as colunas de um select Eu as inicio por var_ mas você que escolhe 2 - Ao invés de set você pode atribuir um valor a variavel atraves de variavel := conteudo; (sinal de dois pontos e igual e a instrução tem que acabar por ponto e virgula) O oracle é mais chatinho do que o mssql neste ponto que dispensa o uso de um delimitador 3 - Para concatenar strings em Oracle não pode usar +. Use ||. 4 - A estrutura do IF no Oracle é IF <condicao> THEN <comandos se verdadeiro terminados por ;> ELSE <comandos se falso terminados por ;> END IF; Não use BEGIN ou END 5 - em uma Procedure as variavais são declaradas após o IS ou AS e não por DECLARE Segue o seu exemplo traduzido, veja se ajuda CREATE or REPLACE PROCEDURE MYPROCEDURE (var_parametro_01 varchar2, var_parametro_02 number) AS var_query varchar2(1000); var_conf number; BEGIN var_query := 'SELECT CAMPO_01, campo_02, campo_03 FROM tabelaA '; var_conf := 0; if var_parametro_01 IS NOT NULL then var_query := var_query|| ' WHERE CAMPO_A = '||var_parametro_01; var_conf := 1; end if; IF var_parametro_02 IS NOT NULL then IF var_conf = 0 then var_query := var_query||' WHERE CAMPO_B = '||var_parametro_02; ELSE var_query := var_query||' AND CAMPO_B = '||var_parametro_02; END IF; END IF; EXECUTE IMMEDIATE (var_query); END; Compartilhar este post Link para o post Compartilhar em outros sites