Firebird

Mensajes recientes

Páginas: [1] 2 3 ... 10
1
SQL / Re:Seperador de Miles Firebird
« Último mensaje por Walter septiembre 28, 2019, 09:17:34 am »
Aunque se puede crear una función o un stored procedure que realice esa tarea, no es del todo correcto hacerlo. Lo recomendable es que sea tu aplicación la que obtenga los datos y los formatee.

Saludos.

Walter.
2
SQL / Re:Trigger sql firebird
« Último mensaje por Walter septiembre 28, 2019, 08:20:16 am »
EXCEPTION finaliza el trigger y el control pasa al nivel superior.

Saludos.

Walter.
3
Conceptos y Dudas / Re:String >32k en BLOB
« Último mensaje por YAcosta septiembre 27, 2019, 05:13:15 pm »
Sorry amigo, no cuento con ello.
4
Conceptos y Dudas / String >32k en BLOB
« Último mensaje por Mariano Poli septiembre 27, 2019, 08:38:24 am »
Para hacer un update de un string mayor a 32k en un campo BLOB me da error -104
Entiendo que es precisamente por la longitud del string
Alguien puede facilitarme algún fragmento de código para hacer un update de un campo BLOB donde el contenido es > 32K ??
Muchas gracias
5
SQL / Trigger sql firebird
« Último mensaje por GloMabTar agosto 15, 2019, 01:16:21 pm »
Hola a todos:

Tengo una tabla Articulos con campo codigo y descripcion y tengo un trigger para que no me permita ingresar registros duplicados. 

CREATE OR ALTER TRIGGER ARTICULOS_BI0 FOR ARTICULOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if new.descripcion in (select descripcion from articulos ) then
  exception error_articulo_descripcion;
end

Si hago un insert con varias filas y tengo articulos nuevos y repetidos me arroja el error solo del primer artículo pero no me agrega los que no están repetidos.
INSERT INTO tabla (campo1, campo2, campo3) VALUES
(v1_1, v1_2, v1_3),
(v2_1, v2_2, v2_3),
(v3_1, v3_2, v3_3); 
Si hago un instert por fila si funciona perfectamente.
 Insert Into mi_tabla(mis_campos) values(mi_datos);
 Insert Into mi_tabla(mis_campos) values(mi_datos);
 Insert Into mi_tabla(mis_campos) values(mi_datos);

No sé como lo puedo solucionar pero no puedo poner el código ni la descripción como clave primaria. tengo que hacerlo si o si a través del trigger.
6
SQL / Seperador de Miles Firebird
« Último mensaje por Claudio agosto 07, 2019, 11:19:32 am »
 En alguna oportunidad quise emitir la información de un registro tipo numeric(18,2) y concatenarlo con un campo string para poder mostrar en un showmessage, guardar en algun expediente o posterior envio de mail de informes, etc.
El problema que encontré fue que por ejemplo: a los usuario les gustaba mas
Cita
Se autorizó una póliza de Gs. 150.000.000
que
Cita
Se autorizó una póliza de Gs. 150000000

 Quisiera saber si existe alguna otra manera??? no obstante a continuación publico mi SP que hace la funcion de separar un numero en formatos.

Cita de: Claudio

create or alter procedure separador_miles (
    i_monto double precision not null = 0,
    i_sep_miles char(1) not null = '.',
    i_cant_dec integer not null = 2)
returns (
    o_monto varchar(30))
as
declare variable v_sep_decim char(1);
declare variable v_monto varchar(30);
declare variable v_s_miles varchar(18);
declare variable v_s_decim varchar(12);
declare variable v_parte_ente bigint;
declare variable i integer;
declare variable chr char(3);
declare variable v_parte_dec double precision;
begin
  /*Creado por CBB 02/08/2019*/
  if (:i_monto = 0) then
  begin
    o_monto = 0;
    suspend;
    exit;
  end
  v_sep_decim=',';
  if (:i_sep_miles=',') then v_sep_decim='.';
  /*Seccion Miles*/
  v_monto = cast(:i_monto as varchar(30));
  v_s_miles = trim(substring(:v_monto from 1 for (position('.', :v_monto) - 1)));
  v_s_miles = lpad(:v_s_miles, 18, '0');
  i = 3;
  o_monto = '';
  while (:i <= 18) do
  begin
    chr = substring(:v_s_miles from :i - 2 for 3);
    if ((cast(chr as smallint) <> 0) or (:o_monto <> ''))  then
    begin
      if (:o_monto = '') then
      begin
        chr = trim('' || cast(:chr as smallint));
      end
      o_monto = :o_monto || trim(:chr);
      if (:i < 18) then
        o_monto = :o_monto || :i_sep_miles;
    end
    i = :i + 3;
  end
  if (:o_monto = '') then
    o_monto = '0';
  /*Seccion Decimales*/
  if (:i_cant_dec > 0) then
  begin
    v_parte_ente = trunc(:i_monto, 0);
    v_parte_dec = (cast(:i_monto as double precision) - cast(:v_parte_ente as double precision));
    if (:v_parte_dec < 0) then
      v_parte_dec = :v_parte_dec * -1;
    v_s_decim = cast(:v_parte_dec as varchar(12));
    v_s_decim = trim(substring(:v_s_decim from (position('.', :v_s_decim) + 1) for 12));
    v_s_decim = substring(:v_s_decim from 1 for :i_cant_dec);
    if (cast(:v_s_decim as integer) <> 0) then
      o_monto = :o_monto || :v_sep_decim || :v_s_decim;
  end
  suspend;
end

 
7
Conceptos y Dudas / Re:Cómo usar Max Y GROUP BY en firebird
« Último mensaje por YAcosta abril 18, 2019, 11:58:43 pm »
Estimada, GROUP BY no es una funcion, es una sentencia. Funcion es AVG, MAX, MIN, etc.

La funcion de agrupamiento va en el Select, Tu Group By esta bien, lo que esta mal es que no indicas por cual funcion quieres que aplique ese GROUP BY
Checa este ejemplo:

SELECT COLUM1, SUM(COLUM2)
FROM TABLA
GROUP BY COLUM1

Aqui hago la suma de colum2 agrupando por colum1, tu estas haciendo algo como esto:

SELECT COLUM1, COLUM2
FROM TABLA
GROUP BY COLUM1, COLUM2

Saludos
8
Conceptos y Dudas / Re:Cómo usar Max Y GROUP BY en firebird
« Último mensaje por Eli abril 16, 2019, 01:28:34 pm »
si tengo la función de agrupamiento
GROUP BY cve_art,fecha_doc,descr,stock_min,stock_max,exist,cve_doc,cant,num_alm,num_par
order by fecha_doc desc
9
Conceptos y Dudas / Re:Cómo usar Max Y GROUP BY en firebird
« Último mensaje por YAcosta abril 16, 2019, 10:38:37 am »
Pero te falta eso justamente, en ninguna parte le dices que quieres la ultima fecha (ejemplo: Max(fecha_doc) )

Tampoco tienes ninguna función de agrupamiento.


Saludos

10
Conceptos y Dudas / Re:Cómo usar Max Y GROUP BY en firebird
« Último mensaje por Eli abril 15, 2019, 12:28:25 pm »
select par_compq01.CVE_ART, mult01.cve_Art,inve01.descr,mult01.stock_min,mult01.stock_max,mult01.exist,
par_compq01.CVE_DOC,par_compq01.CANT,
par_compq01.NUM_ALM,par_compq01.NUM_PAR,compq01.FECHA_DOC
from mult01
left outer join INVE01 on mult01.CVE_art=INVE01.CVE_ART
left outer join par_compq01 on mult01.CVE_ART=par_compq01.CVE_ART  and mult01.CVE_ALM=par_compq01.NUM_ALM
left outer join compq01 on par_compq01.CVE_DOC=compq01.CVE_DOC
where mult01.CVE_ALM=2
 GROUP BY cve_art,fecha_doc,descr,stock_min,stock_max,exist,cve_doc,cant,num_alm,num_par 
order by fecha_doc desc



esa es mi consulta, no me agrupa, quiere la última fecha de cada artículo
Páginas: [1] 2 3 ... 10