Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Informar detalhes sobre as operações de concatenação e uso de parênteses
portuguese
Composition Setup
import.css=/download/attachments/3279126062824/newLayouttecnologia.css

Pagetitle

...

MSParse

...

...

...

MSParse

Analisa

...

e

...

converte

...

uma Stored Procedure escrita em SQL ANSI, para um dos bancos de dados relacionais homologados.

Sintaxe

Bloco de código
collapsefalse
MSParse( < cSQL >, < cBD >, [ lComp ] )

Parâmetros

MSParse ( < cSQL>, < cBD>, [ lIsQuery] ) --> cSQLConvert

...

Nome

Tipo

Descrição

Obrigatório

Referência

cSQL

...

caractere

Stored Procedure

...

escrita em

...

SQL ANSI, que será convertida.

X

...


cBD

...

caractere

Indica o nome do banco de dados para o qual será convertida

...

Stored Procedure.

X

...


lComp

...

 

...

lógico

Parâmetro de compatibilidade. Deve ser informado o valor nulo ( NIL ).



Retorno

Nome

Tipo

Descrição

cResult

caractere

Retorna a Stored Procedure

...

convertida para o banco em questão, ou retorna uma string vazia caso exista algum erro ou impossibilidade na conversão da procedure.

Informações
icontrue
titleObservações
  • Recomendamos a utilização da função MSParseFull(), pois contempla todas as características dessa função com mais funcionalidades.


    Nota
    icontrue
    titleAtenção

    As operações de concatenação devem utilizar o operador "||", e quando usadas junto com outros operadores, a operação de concatenação deve estar isolada entre "()" parênteses. A operação de concatenação pode ser traduzida para uma chamada de função – como é o caso do POSTGRES – e quando usada junto com outros operadores em uma expressão, a ausência dos parênteses para indicar a precedencia / ordem da operação pode levar a resultados incorretos ou inválidos.

Os bancos de dados relacionais aceitos, no segundo parâmetro <cBD>, são:

 
    • "INFORMIX",
para bancos de dados Informix®
    • para bancos de dados Informix®
    • "DB2
 "DB2 
    • " , para IBM Universal
Database®
    • Database® (DB2)
 
    • "ORACLE", para bancos de
dados Oracle®
    • dados Oracle®
 
    • "SYBASE", para SyBase Adaptive
Server®
    • Server®
 
    • "MSSQL", para Microsoft SQL®
    • "MYSQL",
para Microsoft SQL®

 

    • para MySQL Database
    • "POSTGRES", para PostgreSQL

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
user function exemplo()

  TCLink()
  
  cSQL
#INCLUDE 'TOTVS.CH'
User Function TestM1()
Local tSQL := ""
Local sErro := ""
Local sSql
 := "
"
tSQL
 
+=
Create 
"create proc sp_Teste (@dtInicial
Procedure PROC_EXAMPLE(@outStr char(
10
64)
, @dtFinal char(18)
 OUTPUT, 
@ben_id char(6)) " + chr(13)
tSQL += "as " + chr(13)
tSQL += "declare " + chr(13)
tSQL += " @id integer = 1, " + chr(13)
tSQL += " @din money, " + chr(13)
tSQL += " @hoje date " + chr(13)
tSQL += "begin " + chr(13)
tSQL += " select distinct " + chr(13)
tSQL += "
@outValue int OUTPUT) As " + ;
          " Begin " + ;
          "   select @outStr = 'Teste' " + ;
          
j.nav_n2 navio, " + chr(13)
tSQL +=
"   select @outValue = 100 " + ;
         
isnull(g.proc_nome,'NAO DEVOLVIDO')
 
local_dev,
" 
+ chr(13)
tSQL += " dateadd(hour, 2, b.data_saida) " + chr(13)
tSQL += " from tabela1 a, " + chr(13)
tSQL += " tabela2 b " + chr(13)
tSQL += " where a.dt_entrada between convert(datetime,@dtInicial,103) and convert(datetime,@dtFinal,103) " + chr(13)
tSQL += " and a.cliente = b.cliente " + chr(13)
tSQL += "end " + chr(13)
tSQL += "go "
sSql := msparse(tSQL,"INFORMIX")
conout("Traduzido: ")
conout(sSql)
sErro = msparseerror()
conout("Erro encontrado: ")
conout(sErro)
conout("FIM")
return
Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server
 
End "
          
  // verifique o banco de dados utilizado para atribuir no segundo parametro da função MSParse
  cResult := MSParse(cSQL, "ORACLE", .F.)
  
  conout(cResult)
  
  TCSPExec(cResult)
  
  if TCSPExist("PROC_EXAMPLE") == .T.
    conout("Procedure criada com sucesso!")
  endif
  
  TCUnlink()
  
Return

Veja também