Código SQL
[-]
SET TERM ^^ ;
CREATE PROCEDURE P_MAX_CON_LETRAS returns (
FACTURA VarChar(30),
NUMERO Integer)
AS
DECLARE VARIABLE c char(1);
DECLARE VARIABLE cadena varchar(30);
DECLARE VARIABLE cadena1 varchar(30);
DECLARE VARIABLE CIFRAS1 integer;
DECLARE VARIABLE i integer;
DECLARE VARIABLE j integer;
DECLARE VARIABLE AUMENTAR Integer;
DECLARE VARIABLE CIFRAS Integer;
DECLARE VARIABLE LETRA VarChar(4);
begin
for select AUMENTAR, CIFRAS, LETRA from T_CIFRAS
into :AUMENTAR, :CIFRAS, :LETRA do
begin
if (aumentar is null) then
aumentar = 0;
if (CIFRAS is null) then
CIFRAS = 1;
for select FACTURA from T_DEFINICION_TRATAMIENTO where FACTURA is not null into
:FACTURA
do
begin
CIFRAS1= CIFRAS;
cadena = '0';
numero=0;
j=1;
i = strlen(:FACTURA);
while(j<=i) do
begin
c = substr(FACTURA,j,j);
if (c between '0' and '9') then
begin
cadena = cadena || cast(:c as integer);
end
else
cadena1 = substr(FACTURA,1,j);
j=j+1;
end
numero = cast(cadena as integer) + aumentar;
IF ((CIFRAS1 < i) and (CIFRAS < 2)) then
CIFRAS1 = i;
if ((letra is not null) and (letra <> '') and (letra <> ' ') and (letra <> ' ')) then
cadena1 = letra;
FACTURA = cadena1 || lpad(cast(numero as varchar(30)),cifras1,'0');
suspend;
end
end
end
^^
SET TERM ; ^^
con el anterior sp lo que hago es obtener un consecutivo de una factura la cual puede tener letras y el numero entero que se ve sin las letras algo aasi
con la ultima factura generada y guardada en la bd con el valor PA0045 después de ejecutar el SP el valor Factura del SP sera PA0046 y el numero sera 46