Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Update De Una Vista Firebird (https://www.clubdelphi.com/foros/showthread.php?t=89988)

KOVNEO 14-03-2016 23:52:18

Update De Una Vista Firebird
 
HOLA QUIERO REALIZAR UN UPDATE A UNA VISTA PERO ME MARCA QUE ES SOLO DE LECTURA
cannot update read-only view ENTRESIS_CC_VE.

YA LE E OTORGADO PERMISOS PERO NO TENGO IDEA DE CUAL SEA MI ERROR
SI ME PUDIERAN ORIENTAR LES ESTARÍA MUY AGRADECIDO
Código SQL [-]
CREATE VIEW ENTRESIS_CC_VE( CC_ID,FECHA_C,VE_ID,FECHA_V)
  AS
  SELECT 
E.DOCTO_DEST_ID,
C.FECHA,
E.DOCTO_FTE_ID,
V.FECHA
  FROM DOCTOS_ENTRE_SIS E
   JOIN
DOCTOS_CC C
      ON C.DOCTO_CC_ID = E.DOCTO_DEST_ID
   JOIN
DOCTOS_VE V
      ON E.DOCTO_DEST_ID = C.DOCTO_CC_ID AND E.DOCTO_FTE_ID = V.DOCTO_VE_ID;

GRANT ALL ON DOCTOS_CC TO ENTRESIS_CC_VE;
GRANT ALL ON DOCTOS_VE TO ENTRESIS_CC_VE;

UPDATE ENTRESIS_CC_VE  SET FECHA_C=DATEADD(datediff (year from FECHA_C to cast('01/01/2015' as date)) year to FECHA_C),
FECHA_V=DATEADD(datediff (year from FECHA_V to cast('01/01/2015' as date)) year to FECHA_V)
WHERE EXTRACT(YEAR FROM FECHA_C) NOT LIKE '%2016' OR EXTRACT(YEAR FROM FECHA_V) NOT LIKE '%2016';

Delphius 15-03-2016 00:09:08

KOVNEO el error apunta a que el conjunto de datos devuelto por dicha vista no es actualizable. Así como con algunos Querys con consultas simples a los que se les puede realizar un insert o update, hay vistas que se les permita hacer insert o update.
Esta no es el caso ya que interviene un join y el conjunto de restricciones por el lado del where a cumplir la hacen muy compleja de soportar un UPDATE.

No tiene nada que ver con los permisos.

Saludos,

Casimiro Notevi 15-03-2016 00:27:08

Cita:

Empezado por KOVNEO (Mensaje 503346)
HOLA

Mira el punto 6 de nuestra guía de estilo.

ASAPLTDA 15-03-2016 18:13:40

Vista Actualizable
 
Hola Cuando la vista no es actualizable se debe crear un trigger a la vista, y en el trigger efectuar los correspondientes update / insert a la tabla fisica
ejemplo

disculpa a todos se me olvido colocar el de sql

-- **************************************
CREATE VIEW LISTADEPRECIOSDET_V0(
LISTAPRECIO,
RECURSO,
DRECURSO,
UNDMED,
RANGOINFERIOR,
RANGOSUPERIOR,
CURCOD,
PRECIOVENTAUNITARIO,
PRECIOVENTAMINIMO,
FLGPRECIOVENTACERO,
VALORTOTALMINIMO,
FLGREQCONTENEDOR,
TAXCOD,
VRTAX,
FLGIVAINCLUIDO,
FLGREQREPORTPRECIOVENTAUNITARIO,
ACTIVO)
AS
SELECT D.LISTAPRECIO, D.RECURSO, R.DRECURSO,R.UNDMED, RANGOINFERIOR, RANGOSUPERIOR, D.CURCOD, D.PRECIOVENTAUNITARIO, D.PRECIOVENTAMINIMO,
D.FLGPRECIOVENTACERO,D.VALORTOTALMINIMO , D.FLGREQCONTENEDOR , D.TAXCOD ,D.VRTAX,D.FLGIVAINCLUIDO,
D.FLGREQREPORTPRECIOVENTAUNITARIO, D.ACTIVO FROM LISTADEPRECIOSDET D
INNER JOIN RESMST R ON R.RECURSO = D.RECURSO
;


-- ******************************************
SET SQL DIALECT 3;



SET TERM ^ ;



CREATE OR ALTER TRIGGER LISTADEPRECIOSDET_V0_BI0 FOR LISTADEPRECIOSDET_V0
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
POST_EVENT 'DUMMY_EVENT';
END
^


CREATE OR ALTER TRIGGER LISTADEPRECIOSDET_V0_BI0 FOR LISTADEPRECIOSDET_V0
ACTIVE BEFORE INSERT POSITION 0
AS
begin
IF(INSERTING) THEN BEGIN
INSERT INTO LISTADEPRECIOSDET (LISTAPRECIO, RECURSO, CURCOD,RANGOINFERIOR,RANGOSUPERIOR,PRECIOVENTAMINIMO,PRECIOVENTAUNITARIO,
FLGPRECIOVENTACERO, VALORTOTALMINIMO,FLGREQCONTENEDOR,TAXCOD,VRTAX,FLGIVAINCLUIDO,FLGREQREPORTPRECIOVENTAUNITARIO)

VALUES(NEW.LISTAPRECIO, NEW.RECURSO,NEW.CURCOD,NEW.RANGOINFERIOR,NEW.RANGOSUPERIOR,NEW.PRECIOVENTAMINIMO,NEW.PRECIOVENTAUNIT ARIO,
NEW.FLGPRECIOVENTACERO, NEW.VALORTOTALMINIMO,NEW.FLGREQCONTENEDOR, NEW.TAXCOD, NEW.VRTAX,
NEW.FLGIVAINCLUIDO, NEW.FLGREQREPORTPRECIOVENTAUNITARIO);

END
end
^

SET TERM ; ^


La franja horaria es GMT +2. Ahora son las 04:16:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi