Senhores,

eu tenho um problema em um SQL Dinamico.
Vou montar o exemplo:

Tenho o SQL abaixo que FUNCIONA (sei que não é a melhor forma, por isso
estou procurando outra):

    vsql || '        Select CD_A, NM_A, NM_B, NM_C, UF, NM_D';
    vsql := vsql || '  From TABELA Where ';
    vsql := vsql || coluna_Sql || ' = ''' || filtro_Sql || '''';
    vsql := vsql || ' order  by ' || campo_Ordenacao || ' ' ||
tipo_Ordenacao;

Tentei utilizar bind variables (mas nao consegui fazer funcionar o parametro
de COLUNA)
Bind como parte da estrutura de tabela do SQL (parametro coluna_sql) NÃO
FUNCIONA.

    vsql || '        Select CD_A, NM_A, NM_B, NM_C, UF, NM_D';
    vsql := vsql || '  From TABELA Where ';
    vsql := vsql || :1 || ' = ''' || :2 || '''';
    vsql := vsql || ' order  by ' || :3 || ' ' || :4;
USING coluna_Sql, filtro_Sql, campo_Ordenacao, tipo_Ordenacao

coluna_Sql : parametro que o usuario passa escolhendo quais colunas da
tabela ele vai usar para comparar
filtro_Sql : parametro que o usuario passa para ser comparado
campo_Ordenacao : parametro que o usuario quer ordenar a pesquisa
tipo_Ordenacao : parametro desc ou asc

exemplo de parametros:
coluna_Sql : UF
filtro_Sql : SC
campo_Ordenacao : NM_A
tipo_Ordenacao : DESC

coluna_Sql : NM_C
filtro_Sql : 'Capinzal'
campo_Ordenacao : NM_B
tipo_Ordenacao : ASC

Sei que teria como fazer algo como:
dbms_sql.parse(retorna_cursor, vsql , dbms_sql.NATIVE);

Minha pergunta é se eu executar da forma acima (dbms_sql.NATIVE) o sql vai
ser sempre recompilar?? Seria a mesma coisa que executar direto o vsql no
OPNE retorna_cursor FOR....??

Caso nao tenha sido bem claro e puderem me ajudar eu agradeço.

Att,
-- 
Fernando Franquini - Capin
Bacharel em Ciencias da Computacao - UFSC
Analista de Sistemas / DBA
emails: ferna...@wf5.com.br / fernando.franqu...@gmail.com
Celular: (48) 99024047
Florianópolis - SC - Brasil
www.wf5.com.br


[As partes desta mensagem que não continham texto foram removidas]

Responder a