Ver Mensaje Individual
  #3  
Antiguo 04-03-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Reputación: 21
teletranx Va por buen camino
Talking

Juan Antonio

Respondiendo a tus preguntas
te envio sp que clona tablas

CREATE PROCEDURE P_CLONATABLA (
TABLA VARCHAR(10),
NEDES INTEGER)
AS
DECLARE VARIABLE CAMPO VARCHAR(100);
DECLARE VARIABLE SOURCE VARCHAR(100);
DECLARE VARIABLE TOTALCAMPOS INTEGER;
DECLARE VARIABLE CONTADOR INTEGER;
DECLARE VARIABLE LARGO INTEGER;
DECLARE VARIABLE SCALE INTEGER;
DECLARE VARIABLE TIPO INTEGER;
DECLARE VARIABLE SUBTIPO INTEGER;
DECLARE VARIABLE NPRECISION INTEGER;
DECLARE VARIABLE CTIPO VARCHAR(20);
DECLARE VARIABLE SQL VARCHAR(32000);
DECLARE VARIABLE BORRAR VARCHAR(100);
DECLARE VARIABLE TABLAPASO VARCHAR(20);
DECLARE VARIABLE TABLASAL CHAR(20);
begin
TablaPaso = 'PASO' || TABLA;
TablaSal = 'C:\' || TABLA || '.TXT';
Select Count(*)
From rdb$relation_fields
where rdb$relation_name = :TablaPaso
into :TotalCampos;
if (TotalCampos = 0) then
Begin
Sql = 'CREATE TABLE ' || TablaPaso || ' (';

Contador = 1;
Select Count(*)
From rdb$relation_fields
where rdb$relation_name = :TABLA
into :TotalCampos;
For
Select R.RDB$Field_Name, r.rdb$Field_Source, f.rdb$Field_Length,
f.rdb$Field_Scale, f.rdb$Field_Type, f.rdb$Field_Sub_Type,
f.rdb$Field_Precision From rdb$relation_fields R, rdb$Fields f
where R.rdb$relation_name = :Tabla and r.rdb$Field_Source = f.rdb$Field_Name
ORDER BY R.rdb$field_position
Into :Campo, :Source, :Largo, :Scale, :Tipo, :SubTipo,
:nPrecision
Do
Begin
if (substr(f_lrtrim(Source),1,4) <> 'RDB$') then
Begin
if (Contador < TotalCampos) then
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(Source) || ',';
end
else
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(Source);
end
End
else
Begin
Scale = Abs(Scale);
if (Tipo = 7) Then cTipo = 'SMALLINT';
if (Tipo = 8) THEN cTipo = 'INTEGER';
if (Tipo = 10) Then cTipo = 'FLOAT';
if (Tipo = 27) Then cTipo = 'DOUBLE PRECISION';
if (Tipo = 12) THEN cTipo = 'DATE';
if (Tipo = 13) Then cTipo = 'TIME';
if (Tipo = 35) Then cTipo = 'TIMESTAMP';
if (Tipo = 14) THEN cTipo = 'CHAR(' || f_lrtrim(Cast (Largo as VarChar(5))) || ')';
if (Tipo = 37) THEN cTipo = 'VARCHAR(' || f_lrtrim(Cast (Largo as VarChar(5))) || ')';
if (((Tipo = 8) or (Tipo = 16)) and
(SubTipo = 1)) Then cTipo = 'NUMERIC('|| f_lrtrim(Cast (nPrecision as VarChar(5))) ||
',' || f_lrtrim(Cast (Scale as VarChar(5))) || ')';
if (((Tipo = 8) or (Tipo = 16)) and
(SubTipo = 2)) Then cTipo = 'DECIMAL('|| f_lrtrim(Cast (nPrecision as VarChar(5))) ||
',' || f_lrtrim(Cast (Scale as VarChar(5))) || ')';
if ((Tipo = 261) and (SubTipo = 0)) Then cTipo = 'BLOB SUB_TYPE 0 SEGMENT SIZE 80';
if ((Tipo = 261) and (SubTipo = 1)) Then cTipo = 'BLOB SUB_TYPE 1 SEGMENT SIZE 80';
if (Contador < TotalCampos) then
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(cTipo) || ',';
end
else
begin
Sql = Sql || F_LRTRIm(Campo)|| ' ' || F_LRTRIm(cTipo);
end
End
Contador = Contador + 1;
End
Sql = Sql || ')';
execute statement Sql;
--Update RDB$RELATIONS Set RDB$EXTERNAL_FILE = :TablaSal Where
-- RDB$RELATION_NAME = :TablaPaso;
End
Else
Begin
Borrar = 'Delete from ' || TablaPaso || ' Where Ne =' || Cast(NeDes as VarChar(5));
execute statement Borrar;
End
end

Este sp clona tabla si existe, con FireBird 1.5

Lo otro estoy de administrador del equipo

Juan Carlos

Última edición por teletranx fecha: 24-03-2004 a las 17:24:51.
Responder Con Cita