Você está na página 1de 117

PROGRESS DCA

Desenvolvendo Aplicaes Caracter

Completo ambiente de desenvolvimento de aplicaes, composto por :


- Sistema Gerenciador de BD Relacional - Linguagem de 4a. Gerao - Ferramentas de Programao

Benefcios
Flexvel Aberto

Completo

Benefcios


Flexvel

Aberto
Suporta o padro industrial Assegura opes de desenvolvimento heterogneo

Assegura portabilidade das aplicaes em outras plataformas




Completo

Permite construo de grandes aplicaes Produz solues Client/Server

Componentes Lgicos


Base de Dados Tabela  Registro  Campo ndice

Componentes Lgicos
Cliente Empresa Banco = Base Dados

= Tabela = Registro

Nome

= Campo

= ndice

C O M P O N E N T E S

L G I C O S

Componentes Fsicos
.DB

.BI

.LG

.LK

Componentes Fsicos
.DB -> Database
contm os dados atuais e descries da base

.BI

-> Before-Image
contm a imagem dos dados de uma transao

Componentes Fsicos
.LG -> Log
contm as referncias dos usurios , hora de entrada, sada e programas acessados (histrico).

.LK

-> Lock
Informa se a base est sendo acessada.

- Blocos - Declaraes - Funes - Operadores - Variveis - Expresses - Smbolos especiais - Elementos da interface com o usurio (atributos e mtodos) - Eventos

Componentes da Linguagem

Localizao dos Dados

Base de Dados Buffer Registro

Buffer tela

Movimentando dados Base de Dados p Tela

Base de Dados

Buffer Registro

Buffer tela

Movimentando dados Tela p Base de Dados

Base de Dados

Buffer Registro

Buffer Tela

Entrada Usurio

Regras para Movimentao de Dados


Os programas no podem manipular os dados da base de dados at que eles sejam copiados para o buffer de registro;  O usurio no pode interagir com os dados at que eles sejam copiados do buffer de registro para o buffer de tela;


Regras para Movimentao de Dados




As alteraes que so feitas no buffer de tela ou buffer de registro no so atualizadas automaticamente em outro buffer. Deve-se programar o controle de movimentao entre os buffers.

Comando
ASSIGN CREATE DELETE DISPLAY ENABLE FIND FOR EACH GET INSERT PROMPT-FOR RELEASE SET UPDATE

Banco de Dados

Buffer de Registro

Buffer de Tela Usurio

Criando e Modificando Registros


CREATE - Cria um novo registro no banco, inicializa com os valores defaults e deixa uma cpia do registro no buffer de registro. Ex.: CREATE customer. UPDATE - Executa as aes de DISPLAY, PROMPT-FOR e ASSIGN. Ex.: UPDATE customer. UPDATE customer EXCEPT cust-num.

Criando e Modificando Registros


INSERT - Executa as aes de CREATE, DISPLAY, PROMPT-FOR e ASSIGN. Ex.: INSERT customer. ASSIGN - Copia os dados do buffer de tela para o buffer de registro. Ex.: ASSIGN customer.cust-num.

Criando e Modificando Registros


SET - Executa as aes de PROMPT-FOR e ASSIGN. Ex.: SET customer. DELETE - Elimina um registro do buffer de registro e do banco de dados. Ex.: DELETE customer.

Criando e Modificando Registros


ASSIGN - Copia os dados do buffer de tela para seus respectivos campos e/ou variveis no buffer de registro. Ex.: 1. ASSIGN customer.cust-num. 2. DEF VAR i-cust-num AS integer NO-UNDO. PROMPT-FOR i-cust-num. FIND FIRST customer EXCLUSIVE-LOCK. ASSIGN customer.cust-num = i-cust-num.

Comandos que substituem Comandos

INSERT UPDATE
Create

Comandos que substituem Comandos


INSERT UPDATE SET
Create Display

Comandos que substituem Comandos


INSERT UPDATE SET
Create Display Prompt-for Assign

Quadro de Comandos
INSERT UPDATE SET
Delete PromptCreate Display for Assign For Find Each Release

Tipos de Dados do Progress


T ipo Formato Exemplo

Character Integer Decimal Logical Date Rowi Reci

x(8) Aceita: A Al abetico ! Mai culas >>>,>>9 Aceita: z espao 9 mostra 0 >>>,>>9.99 es/No Aceita: True/False MM/DD/AAA --->>>>>9

x(40) > stri al anumrica AAA-9999 > MCZ-9283 !x(10) > STRING ALFANUMRICA >>>,>>9 > 1.500 999,999 > 001.500 zzz,zz9 > 1.500 >>>,>>9.99 > 1.500,45 999,999.99 > 001.500,45 zzz,zz9.99 > 1.500,45 Yes No

Observe a movimentao
insert customer. create customer. update customer. create customer. display customer. prompt-for customer assign customer.

Tipos de Blocos
REPEAT FOR EACH DO PROCEDURES TRIGGERS

REPEAT
Lao (repetio) automtico. Continua a interagir at encontrar um END-ERROR ou outra condio de trmino definida pelo usurio.
Ex: REPEAT WITH 1 COLUMN: CREATE customer. UPDATE customer. END.

FOR EACH
L um registro a cada interao do bloco e copia os dados do banco para o buffer de registro, e do buffer de registro para o buffer de tela.
Ex: FOR EACH customer: DISPLAY customer.cust-num customer.name. END.

DO
Individualiza um grupo de comandos dentro de um bloco simples.
Ex: FOR EACH customer: DISPLAY customer.cust-num. IF credit-limit > 15000 THEN DO: UPDATE customer.name customer.address. MESSAGE "Registro Alterado". END. END.

WHERE
Limita os registros a serem mostrados em uma leitura de uma tabela.
Ex: FOR EACH customer WHERE customer.credit-limit > 15000: DISPLAY customer.cust-num customer.credit-limit. END. OPERADORES: NOT AND OR > >= <> < <=

FIND
Busca apenas um registro em uma tabela.

FIRST (primeiro) NEXT (prximo)

LAST (ltimo) PREV (anterior)

Ex.: FIND FIRST customer WHERE customer.credit-limit > 15000 NO-ERROR. IF AVAILABLE customer THEN DISPLAY customer WITH 1 COLUMN.

PROMPT-FOR
Solicita uma entrada e disponibiliza no buffer de tela.
Ex.: PROMPT-FOR customer.cust-num. FIND customer WHERE customer.cust-num = INPUT customer.cust-num NO-ERROR. IF AVAILABLE customer THEN DISPLAY customer EXCEPT customer.comments WITH 1 COLUMN.

Substituindo "WHERE"
PROMPT-FOR customer.cust-num. FIND customer USING customer.cust-num. DISPLAY customer WITH 1 COLUMN.

WHERE customer.cust-num = INPUT customer.cust-num.

USING
Ex: REPEAT WITH 1 COLUMN: PROMPT-FOR customer.cust-num. FIND customer USING customer.cust-num. DISPLAY customer. END.

BEGINS
Verifica se a 1. expresso inicia com a 2. expresso.
Ex: FOR EACH customer WHERE customer.name BEGINS S: DISPLAY customer.cust-num customer.name customer.phone. END.

MATCHES
Compara uma expresso do tipo caracter com um padro e retorna o valor verdadeiro se a expresso for atendida.
Ex: FOR EACH customer WHERE customer.address MATCHES *st: DISPLAY customer.cust-num customer.name customer.address. END.

CONTAINS
Faz a busca por determinada palavra ou combinao delas, em atributos do tipo wordindex.
Ex: FOR EACH item WHERE item.item-name CONTAINS ball: DISPLAY item.item-num item.item-name item.price. END.

QUERY
Busca registros no banco de dados. utilizada com widgets browses ou declarao GET.
- Definir a query Ex.: DEFINE QUERY query-name FOR table SCROLLING. - Abrir a query Ex.: OPEN QUERY query-name FOR EACH table - Acessar os registros GET ou BROWSE

GET
Retorna um registro de uma query previamente aberta. GET FIRST query-name. NEXT LAST PREV

QUERY
Ex.: DEFINE QUERY qr-cust FOR customer SCROLLING. OPEN QUERY qr-cust FOR EACH customer. GET FIRST qr-cust. REPEAT: DISP customer. GET NEXT qr-cust. END.

BROWSE
Interface para a query.
Ex: DEFINE QUERY query-name FOR customer. DEFINE BROWSE browse-name QUERY query-name DISPLAY customer.cust-num customer.name WITH 15 DOWN TITLE Browse de Clientes. OPEN QUERY query-name FOR EACH customer. UPDATE browse-name WITH FRAME f1.

BY
Usa-se a opo BY para classificao de registros por um campo no indexado.
Ex: FOR EACH customer BY balance DESCENDING: DISPLAY customer.balance customer.name customer.phone. END.

Default : ordenao ascendente

USE-INDEX
A opo USE-INDEX permite voc escolher qualquer ndice definido, para selecionar registros.
Ex: FOR EACH customer USE-INDEX name: DISPLAY customer.balance customer.name customer.phone. END.

LABORATRIO 2

Pgina 3-58 (69)

3-58

Processamento Condicional
Solicita num. cliente

Busca registro no BD

Sim Encontrou?

No

Altera informaes

Adiciona novo

Processamento Condicional
IF expression THEN bloco ELSE DO: bloco END.

Processamento Condicional
CASE expression: WHEN value THEN bloco WHEN value THEN DO: bloco END. WHEN value THEN bloco OTHERWISE DO: END. END CASE.

Eliminando Registros
Elimina o registro da tabela onde o ponteiro estiver posicionado.
Ex: REPEAT: PROMPT-FOR customer.cust-num. FIND customer USING customer.cust-num. DELETE customer. END.

Variveis
DEFINE VARIABLE variable-name AS Tipo de dado LIKE Tabela.atributo INITIAL xxxx NO-UNDO
Ex.: DEFINE VARIABLE c-customer AS char NO-UNDO. DEF VAR i-cust-num LIKE customer.cust-num NO-UNDO.

LABORATRIO 3

Pgina 4-29 (30) Pgina 5-32 (33)

4-29

FRAMES
uma rea retangular dentro da tela do Progress usada para mostrar informaes. Layout default para seus dados. Espao disponvel: Frame (21 linhas) Mensagens (2 linhas) Linha de status (1 linha)

FRAMES
As frames default do progress ocorrem nos seguintes blocos : Procedure Repeat For each Do with frame

FRAMES
DISPLAY Relatrio de Clientes WITH FRAME abc CENTERED. FOR EACH customer: DISPLAY customer.cust-num customer.name WITH FRAME xxx DOWN. END. one-down: dados de uma nica interao do bloco down: dados de mltiplas interaes do bloco.

DEFINE FRAME
Define uma frame para uso por um procedimento ou por diversos procedimentos. Ex.: DEFINE FRAME xxx customer.cust-num NO-LABEL SKIP(2) customer.name AT 5 SKIP customer.address AT 5 WITH SIDE-LABELS OVERLAY.

OPES DE POSICIONAMENTO
AT - Alinhamento pela direita. F1: Short Fld2: Medium Field3: Long COLON - Alinhamento pelos dois pontos. F1: Short Fld2: Medium Field3: Long TO - Alinhamento pela esquerda. F1: Short Fld2: Medium Field3: Long

MANIPULANDO FRAMES
VIEW - apresenta uma frame. Ex.: VIEW FRAME frame-name. HIDE - apaga uma frame. Ex.: HIDE FRAME frame-name NO-PAUSE. CLEAR - apaga o contedo de uma frame. Ex.: CLEAR FRAME f-arq ALL NO-PAUSE.

MANIPULANDO FRAMES
PAUSE - suspende a execuo at que uma tecla seja pressionada ou um certo tempo passar. Ex.: PAUSE. PAUSE 5.

LABORATRIO 4

Pgina 6-29 (32 - 6.11)

MESSAGE
Envia uma mensagem para a tela. MESSAGE texto [ UPDATE vriavel ] [ VIEW-AS ALERT-BOX [QUESTION / INFORMATION WARNING / ERROR ] [ BUTTONS YES-NO YES-NO-CANCEL OK OK-CANCEL RETRY-CANCEL ] [ TITLE ttulo ].

MESSAGE
Ex.: DEF VAR l-resp AS logical INITIAL no NO-UNDO. MESSAGE Confirma Atualizao ? UPDATE l-resp VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO TITLE Atualizao de Dados.

INCLUDES
Em tempo de compilao PROGRESS l estes arquivos include como sendo parte do programa. Vantagem: reutilizao de cdigo. Ex.: {i-valida.i} {i-valida.i Cdigo Invlido} /* i-valida.i */ MESSAGE {1} VIEW-AS ALERT-BOX.

Includes So Expanses em Tempo de Compilao


myprog.p

DO: ... Display record. ... END.

mycode.i

DO: ... Display record. ... END.

Cdigo Modular com Arquivos de Includes


myprog.p

mycode.i {mycode.i} DO: ... Display record. ... END.

{mycode.i}

Usando Arquivos de Include para Definir Variveis


mycode.i
DEFINE VARIABLE...

prog1.p

prog2.p {mycode.i}

{mycode.i}

Exemplo de Includes
{i-mostra.i &table=customer &field=cust-num} /* i-mostra.i */ FOR EACH {&table}: DISPLAY {&table}.{&field}. END.

Observao
No pode ser utilizado a barra \ nos nomes de arquivos ou includes para informar o diretrio, pois causa erro no UNIX. Quando for necessrio utilizar barras para informar diretrio, deve-se utilizar a barra /.

LABORATRIO 5
Criar um programa que possua uma include genrica para mostrar dados de uma determinada tabela, onde sejam passados como parmetros o nome da tabela e uma lista com 3 atributos. Este programa dever chamar esta include para as seguintes tabelas customer e state.

REDIRECIONANDO A SADA

OUTPUT TO nome-arq
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to d elete the image and then insert it again.

PRINTER
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.

TERM

STREAM - Define canais adicionais de sada Ex.: DEFINE STREAM s1. OUTPUT [STREAM xxx] TO arquivo.txt VALUE(c-arquivo) [APPEND]. PUT [STREAM xxx] PUT [STREAM xxx] UNFORMATTED OUTPUT [STREAM xxx] CLOSE. + SKIP

FUNES
TOTAL COUNT MAXIMUM MINIMUM AVERAGE Os labels so mostrados na ordem especificada acima.

TOTALIZANDO VALORES
ACCUMULATE - Calcula uma ou mais expresses de totalizao dentro de um bloco de interao. ACCUM - Acessa os valores acumulados pela funo accumulate.

BREAK
Define categorias de quebra.
Represent. Num Cliente Limite Crdito aaa 1 60.000 aaa 3 3.000 63.000 TOTAL bbb 4 5.000 bbb 8 50.000 55.000 TOTAL 118.000 TOTAL

FUNES
FIRST-OF - Retorna verdadeiro se a iterao atual for a primeira do grupo de quebra. LAST-OF - Retorna verdadeiro se a iterao atual for a ltima do grupo de quebra. Ex.: FOR EACH customer BREAK BY customer.sales-rep: IF FIRST-OF(customer.sales-rep) THEN DISPLAY customer.sales-rep customer.name. END.

CABEALHOS E RODAPS
Opo HEADER PAGE-TOP (depende da HEADER) PAGE-BOTTOM (depende da HEADER) na definio da frame. Ativar/Desativar frames - VIEW / HIDE PAGE-SIZE - nmero de linhas por pgina. PAGE-NUMBER - retorna o nmero da pgina.

LABORATRIO 6

Pgina 7-32

PROGRAMAO ORIENTADA A EVENTOS


The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.

LABORATRIO 7

Pgina 8-34

LABORATRIO 8

Pgina 8-59 (8-63)

MENUS

ASSIGN DEFAULT-WINDOW:MENUBAR = MENU mbar:HANDLE.

DEFINE SUB-MENU sm-Reports MENU-ITEM mi-Labels LABEL "Customer Labels" MENU-ITEM mi-Names LABEL "Customer Names" RULE MENU-ITEM mi-Balances LABEL "Order Totals" MENU-ITEM mi-Today LABEL "Order Items". DEFINE MENU mbar MENUBAR SUB-MENU sm-Table LABEL "Tables" SUB-MENU sm-Reports LABEL "Reports" SUB-MENU sm-Help LABEL "Help".

TRIGGERS PARA MENU


ON CHOOSE OF MENU-ITEM mi-item IN MENU menu-name DO: bloco END. DEF SUB-MENU sm-sair MENU-ITEM mi-sair LABEL "Sai&r" TRIGGERS: ON CHOOSE APPLY "window-close" TO current-window. END TRIGGERS.

LABORATRIO 9

Pgina 9-22

COMPARTILHANDO DADOS
DEFINE VARIABLE NEW NEW GLOBAL SHARED DEFINE SHARED FRAME DEFINE BUFFER DEFINE STREAM

BUFFER
o espelho de uma tabela. Ex. DEFINE BUFFER bf-cliente FOR customer.
define buffer b-aux for customer. find first customer. update customer.cust-num customer.name. find b-aux where b-aux.cust-num = customer.cust-num. display b-aux.name b-aux.phone. update customer.address.

PARMETROS
INPUT: recebe um valor do procedimento que o chamou. Ex.: RUN prog2.p (INPUT c-name). /* prog2.p */ DEF INPUT PARAM c-nome AS char NO-UNDO.

PARMETROS
OUTPUT: retorna um valor para o procedimento que o chamou. Ex.: RUN prog2.p (OUTPUT i-cont). /* prog2.p */ DEF OUTPUT PARAM i-num AS integer NO-UNDO.

PARMETROS
INPUT-OUTPUT: recebe e retorna um valor para o procedimento que o chamou. Ex. RUN prog2.p (INPUT-OUTPUT c-name). /* prog2.p */ DEF INPUT-OUTPUT PARAM c-nome AS char NO-UNDO.

PARMETROS
PARAM BUFFER: passa o buffer do registro como parametro para o programa chamado. Ex. RUN prog2.p (BUFFER customer). /* prog2.p */ DEF PARAM BUFFER b-customer FOR customer.

PARMETROS
PARAM TABLE: passa uma temp-table como parametro para o programa chamado. Ex. RUN prog2.p (INPUT TABLE tt-dados). /* prog2.p */ DEF TEMP-TABLE tt-dados LIKE customer. DEF INPUT PARAM TABLE FOR tt-dados. OUTPUT INPUT-OUTPUT

PROCEDURES INTERNAS
Bloco de cdigo que voc define dentro de um procedimento PROGRESS. Pode-se cham-lo de qualquer ponto do programa. Acessam os mesmos dados do procedimento, sem a necessidade de compartilhamento.

Programa com Procedures Internas


myprog.p proc1.p

RUN proc1.p RUN proc2

PROCEDURE proc2: END.

FOR EACH customer: DISPLAY customer.cust-num customer.name. RUN pi-mostra-pedidos. END. PROCEDURE pi-mostra-pedidos: FOR EACH order OF customer: DISPLAY order.order-num. END. END.

EXECUTANDO PROCEDURES INTERNAS/PROGRAMAS


RUN {extern-procedure} [PERSISTENT [SET handle]] [ (parameter [ , parameter ] . . .) ] [ argument ] . . . [ NO-ERROR ] Ex.: RUN pi-calculo (INPUT 45, OUTPUT v_perc). RUN w-proces.w PERSISTENT SET hproces. RUN pi-digito IN hproces (INPUT 382, OUTPUT v_digit).

COMPILANDO PROGRAMAS
COMPILE <nome-do-programa> [SAVE]. Ex.: COMPILE w-proces.w SAVE. .P .W .i .PY .R

Extenses:

TABELAS TEMPORRIAS
So iguais as tabelas; Possuem ndice; Podem denegrir a performance, caso tenham muitos registros e no possuam ndice adequado; DEF TEMP-TABLE tt_name [NO-UNDO] [LIKE table-name [USE-INDEX index-name [AS PRIMARY]] ... ] [FIELD field-name {AS data-type | LIKE field}] ... [INDEX index-name [IS [UNIQUE] [PRIMARY] [WORD-INDEX ]] {index-field [ASCENDING|DESCENDING]}...]...

TABELAS TEMPORRIAS
Ex.: DEF TEMP-TABLE tt_cliente NO-UNDO LIKE customer FIELD cod_fornec AS character FORMAT x(5) LABEL Fornecedor FIELD region LIKE state.region INDEX fornec IS PRIMARY cod_fornec. INSERT tt_cliente EXCEPT comments WITH 1 COLUMN. FOR EACH tt_cliente NO-LOCK: DISP tt_cliente EXCEPT comments WITH SIDE-LABELS. END.

LABORATRIO 11
Criar a tabela temporria que seja igual a tabela ORDER; Adicionar o atributo name, este dever ser igual ao atributo da tabela CUSTOMER; O programa dever ler todos os CUSTOMERS, todas os ORDERS dos mesmos a atualizar a temp-table, alimentando os atributos: cust-num, name, order-date, order-num e sales-rep. Mostrar uma listagem que mostre os atributos acima e todos os registros da temp-table.

INPUT FROM
INPUT [STREAM xxx] FROM arquivo.txt. Se o arquivo de entrada conter mais campos que o procedimento usa, PROGRESS ignora os campos excedentes. Se o arquivo de entrada conter menos campos que o esperado, PROGRESS processa a linha do arquivo, mas no seta os campos que ficaram sem entrada.

INPUT FROM
INPUT FROM cust.txt. REPEAT: CREATE customer. SET customer.cust-num customer.name customer.sales-rep. END.

EXPORT
OUTPUT TO c:/tmp/state.d. FOR EACH state: EXPORT state. END.
"AK" "AL" "AR" "AZ" "CA" "CO" "Alaska" "West" "Alabama" "South" "Arkansas" "Central" "Arizona" "West" "California" "West" "Colorado" "West"

IMPORT
DEF VAR i-cust AS integer NO-UNDO. DEF VAR c-name AS character NO-UNDO. DEF VAR c-rep AS character NO-UNDO. INPUT FROM cust.txt. REPEAT: IMPORT i-cust c-name c-rep. MESSAGE i-cust SKIP c-name SKIP c-rep VIEW-AS ALERT-BOX. END.

TRATAMENTO DE ERROS
- Erro de sistema - Erro gerado pelo procedimento - a busca de um registro falha ou o procedimento tenta criar um registro com chave duplicada. - Erro de interrupo de processamento quando o usurio pressiona as teclas de ERROR, ENDKEY ou END-ERROR.

TRANSAES
- Unidade completa de trabalho. - A transao um trabalho que se for terminada a sua execuo de forma anormal, ser completamente desfeito, ou seja, todo realizado ou nada feito. Procedimento REPEAT FOR EACH
Blocos que tem processamento de transao

TRANSAES
Uma transao uma interao do bloco mais externo que contiver declaraes que alterem diretamente o banco de dados, ou a leitura de registros com a opo EXCLUSIVE-LOCK. Escopo de uma transao determina a quantidade de trabalho que PROGRESS desfaz em eventos de falha do sistema.

TRANSACTION
REPEAT: CREATE customer. UPDATE cust-num name phone. END. DO TRANSACTION: REPEAT: CREATE customer. UPDATE cust-num name phone. END. END.

BLOQUEIO DE REGISTROS

NO-LOCK SHARE-LOCK (No pode ser utilizado) EXCLUSIVE-LOCK

LABORATRIO 10

Pgina 13-13

FUNES
- CAN-DO: verifica uma string dentro de uma lista separada por vrgulas. IF NOT CAN-DO(lista,string) THEN ... - CAN-FIND: retorna verdadeiro se um registro foi encontrado. Ex.: IF CAN-FIND(customer WHERE customer.cust-num = i-cust-num) THEN ...

FUNES
LOOKUP: retorna um valor inteiro indicando a posio da string dentro de uma lista. Separador default: ,. LOOKUP(string,lista,[separador]). Ex.: LOOKUP(sc,am,pr,sc) ENTRY: retorna uma string caracter baseada em uma lista, a partir de uma posio inteira. Separador default: ,. ENTRY(posio,lista,[separador]). Ex.: ENTRY(2,c-lista,/).

FUNES
- NUM-ENTRIES: retorna o nmero de itens de uma lista. Separador default: ,. NUM-ENTRIES(lista,[separador]) Ex.: NUM-ENTRIES(c-lista,.). - SUBSTRING: extrai uma poro de caracteres de uma string. SUBSTR(string,posio-inicial,posio-final) Ex.: SUBSTR(c-nome,2,10). SUBSTR(c-address,10).

FUNES
- STRING: converte dados no caracter para o tipo de dado caracter. STRING(source,[format]). Ex.: STRING (customer.cust-num). STRING (customer.postal-code,99999). - LENGTH: retorna o tamanho de uma string. Ex.: ASSIGN i-tam = LENGTH(v_cod_estab).

FUNES
- SUBSTITUTE: troca parmetros dentro de uma string. SUBSTITUTE(string, param1, param2, ..., paramN). Ex.: v-desc = SUBSTITUTE(o usurio &1 no foi encontrado, c-user). - TRIM: retira os espaos em branco do incio e do final da string. Ex.: ASSIGN c-user = TRIM( teste ).

FUNES
- REPLACE: troca N ocorrncias da string1 pela string2 dentro de um texto. REPLACE(texto, string1, string2). Ex.: v-desc = o usurio no foi encontrado. v-desc = REPLACE(v-desc, o, ). - INDEX: retorna um inteiro, indicando a posio de uma expresso dentro de uma string. INDEX(string,expresso,posio-inicial p/procura). Ex.: INDEX(curso de progress, de). INDEX(curso de progress, pr, 10).

FUNES
- RECID: endereo fsico de um registro. Ex.: FIND customer WHERE RECID(customer) = 3848 NO-ERROR. - ROWID: endereo fsico de um registro. Ex.: ASSIGN r-reg = ROWID(customer). FIND customer WHERE ROWID(customer) = r-reg NO-ERROR.

DVIDAS ?

Você também pode gostar