Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

JhonyMega

Retornar um SELECT

Recommended Posts

:( 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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.