Vinnaren i pepparkakshustävlingen!
2014-09-19, 20:46
  #1
Medlem
Tjena, har ett problem när jag ska göra en vy som ser till att SSN (personnummer) följer ett specifikt mönster för att kunna insertas.

Kod:
CREATE VIEW InsertView AS                                                                                                                      
	SELECT *                                                                                                                      
	FROM Person                                                                                                                              
	WHERE (Person.Pnr LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
	WITH CHECK OPTION; 


Testdatan:
Kod:
INSERT INTO InsertView (Pnr) VALUES ("19920203-1111");

Får dock ERROR 1369 och lyckas ej lokalisera felet.
Citera
2014-09-19, 21:48
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av Boryan65
Tjena, har ett problem när jag ska göra en vy som ser till att SSN (personnummer) följer ett specifikt mönster för att kunna insertas.

Kod:
CREATE VIEW InsertView AS                                                                                                                      
	SELECT *                                                                                                                      
	FROM Person                                                                                                                              
	WHERE (Person.Pnr LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]')
	WITH CHECK OPTION; 


Testdatan:
Kod:
INSERT INTO InsertView (Pnr) VALUES ("19920203-1111");

Får dock ERROR 1369 och lyckas ej lokalisera felet.
Vad händer om du explicit anger alla kolumner från din bastabell som ska vara med i vyn då(istället för *), funkar din insert efter det?
Citera
2014-09-19, 23:39
  #3
Medlem
Uppstår samma fel som i ursprungsposten.
Citera
2014-09-20, 09:33
  #4
Moderator
Protons avatar
Visserligen för att du skule få ut helt fel data, men bara för experimentets skull kanske du skulle kunna ta bort like-operatorn och se om det funkar efter det då?
Citera
2014-09-20, 12:21
  #5
Medlem
gadzooxs avatar
Varför använda en vy för ändamålet? Risk finns ju alltid att man insertar till den underliggande tabellen, och därmed likförbannat kan åka på korrupt data. Inte bara det - rent semantiskt tycker jag även att det blir fel när en vy används för att enforcea data som insertas. För mig handlar vyer uteslutande om presentation - ett sätt att presentera redan befintlig data på ett annat sätt (aggregerat/joinat/filtrerat/whatever).

Personligen tycker jag att integritetskontroller ska göras med triggers på de fysiska tabellerna.
Här är en stackoverflow-tråd som beskriver exakt det du vill göra, med en trigger: http://stackoverflow.com/questions/1...lar-expression

Sen ska indata givetvis valideras högre upp i applikationen också, men det är en annan femma.
Citera
2014-09-20, 13:48
  #6
Medlem
Citat:
Ursprungligen postat av gadzoox
Varför använda en vy för ändamålet? Risk finns ju alltid att man insertar till den underliggande tabellen, och därmed likförbannat kan åka på korrupt data. Inte bara det - rent semantiskt tycker jag även att det blir fel när en vy används för att enforcea data som insertas. För mig handlar vyer uteslutande om presentation - ett sätt att presentera redan befintlig data på ett annat sätt (aggregerat/joinat/filtrerat/whatever).

Personligen tycker jag att integritetskontroller ska göras med triggers på de fysiska tabellerna.
Här är en stackoverflow-tråd som beskriver exakt det du vill göra, med en trigger: http://stackoverflow.com/questions/1...lar-expression

Sen ska indata givetvis valideras högre upp i applikationen också, men det är en annan femma.
Tyvärr så anser jag att du har fel i det du säger.

On topic: RLIKE istället för LIKE
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback