Oracle - Pro C en SQL

 
Vista:

Pro C en SQL

Publicado por Hector Moreno (3 intervenciones) el 27/02/2008 19:22:34
Saludos.
estimados todos, espero su respuesta. gracias
No domino proC y necesito que este sig codido se pase a SQL mediante la creacion de una funcion.
GRACIAS !!

/******************************************************************
* * ******************************************************************/
void contrat( cduniec, cdram, edo, nopol, agrupa, digv, mon )
char *cduniec;
char *cdram;
char *edo;
char *nopol;
char *agrupa;
int digv;
char *mon;
{

char cRefe[19]; /* Referencia*/
int v_digito; /*Digito verificador*/
int i;
int m;
int cont = 0;

vcharstr(v_cdunieco,cduniec);
vcharstr(v_cdramo,cdram);
vcharstr(v_estado,edo);
vcharstr(v_nmpoliza,nopol);
vcharstr(v_cdagrupa,agrupa);
v_digito = digv;
vcharstr(v_moneda,mon);

printf(" JJD: Agrupa %s ", v_cdagrupa.arr);
EXEC SQL
Select Lpad(:v_cdunieco,3,'0'),Lpad(:v_nmpoliza,10,'0')
Into :v_unieco,:v_poliza
From dual;

EXEC SQL WHENEVER NOT FOUND GOTO salir;
EXEC SQL WHENEVER SQLERROR GOTO casca;
EXEC SQL OPEN C_CONTRAT;
for ( m = 1; m <= 8; m++ ){
printf(" %d", m);
cont = cont + 1;

EXEC SQL FETCH C_CONTRAT INTO :v_banco, :v_tipcontr, v_contrato, :v_refer;

vcharlim(v_banco);
vcharlim(v_tipcontr);
vcharlim(v_contrato);

printf(" JJD: %s %s %s %s ", v_banco.arr, v_tipcontr.arr, v_contrato.arr, cRefe );

if ( v_refer == 1 ){

sprintf(cRefe,"%s%s%s%s%d",v_unieco.arr,v_cdramo.arr,v_poliza.arr,v_cdagrupa.arr, v_digito);

}

trc( "%s %s %s %s ", v_banco.arr, v_tipcontr.arr, v_contrato.arr, cRefe );

}

salir:
EXEC SQL CLOSE C_CONTRAT;

if ( cont < 8 ){
for ( i = cont; i <= 8; i++ ){
trc( " ");
}
}

casca:
EXEC SQL WHENEVER SQLERROR CONTINUE;
sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml]='';
strcpy(jmsgerror,sqlca.sqlerrm.sqlerrmc);

}
/*********************************************************/
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Pro C en SQL

Publicado por Carlos F (1 intervención) el 13/07/2013 15:02:22
Estimado Héctor, veo tu mensaje unos años tarde... pero por si te interesa o le interesa a alguien, paso a comentar algunas equivalencias entre el Pro-C y el PL-SQL.

void contrat( cduniec, cdram, edo, nopol, agrupa, digv, mon )
char *cduniec;
char *cdram;
char *edo;
char *nopol;
char *agrupa;
int digv;
char *mon;

Una función void, en pl se llama procedimiento y se puede escribir como:

> procedure contrat(cduniec varchar2, cdram varchar2, edo varchar2, nopol varchar2, agrupa varchar2, digv number, mon varchar2) is


------------------------------------------------------
Después hay declaraciones de variables en pro-c que van a ser compartidas con las instrucciones pl, pero al traducir la función a pl. Estas variables se declararán directamente en pl.
------------------------------------------------------


Select Lpad(:v_cdunieco,3,'0'),Lpad(:v_nmpoliza,10,'0')
Into :v_unieco,:v_poliza
From dual;

es lo mismo que:

> v_cdunieco:= Lpad(cduniec,3,'0');
> v_nmpoliza:= Lpad(v_nmpoliza,10,'0');


-------------------------------------------------------


EXEC SQL OPEN C_CONTRAT;
EXEC SQL FETCH C_CONTRAT INTO :v_banco, :v_tipcontr, v_contrato, :v_refer;
EXEC SQL CLOSE C_CONTRAT;

es lo mismo que:

> OPEN C_CONTRAT;
> FETCH C_CONTRAT INTO v_banco, v_tipcontr, v_contrato, v_refer;
> CLOSE C_CONTRAT;


Lo demás son un par de bucles y salidas de los datos hacia una traza que las podés reemplazar por dbms_output


P.D.:

Ojo, falta definir el cursor C_CONTRAT que no está en el código publicado

¿Es un módulo de administración de seguros?
¿por casualidad se llama Gador?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar