Question

J'ai vue connecter 4 tables

CREATE VIEW BookCopyInfo 
AS
SELECT
  bc.BookCopyID, b.BookTitle, m.FirstName || ' ' || m.LastName AS BorrowedBy,
  l.expectedReturnDate, (SYSDATE - l.expectedReturnDate) AS NoOfDaysLate
FROM Book b, Member m, Lending l, BookCopy bc
WHERE b.BookID = bc.BookID AND l.MemberID = m.MemberID
  AND l.BookCopyID = bc.BookCopyID

Il y a une petite arithmétique date en cours qui trouve le nombre de jours était un livre fin

(SYSDATE - l.expectedReturnDate)

Quand je fais un SELECT * FROM BookCopyInfo, je reçois des lignes comme

4  | Human Computer Interaction | Alan Paul | 10-JUL-10  | -13.642292

Il est donc correct et -13 est la bonne réponse en fait.

retourne DESC BookCopyInfo

 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------

 BOOKCOPYID                                NOT NULL NUMBER(38)
 BOOKTITLE                                 NOT NULL VARCHAR2(100)
 BORROWEDBY                                         VARCHAR2(126)
 EXPECTEDRETURNDATE                        NOT NULL DATE
 NOOFDAYSLATE                                       NUMBER(38)

Cependant, en C #

DataTable dtBookInfo = new DataTable();
da = new OracleDataAdapter("SELECT * FROM BookCopyInfo", con);
da.Fill(dtBookInfo);

capture une exception dans la ligne da.Fill

  

OverflowException a été non gérée par le code utilisateur.
  opération arithmétique a donné lieu à un trop-plein.

Pourquoi ça marche bien dans SQLPlus mais échoue en C #? : S

Était-ce utile?

La solution

Je crois qu'il doit avec le type de données SQL Nombre. Vous pouvez essayer l'option suivante ..

1) .... Round ((SYSDATE - l.expectedReturnDate), 2) ...

2) convertir le type de données de "NoOfDaysLate" à nombre entier.

Autres conseils

Si vous êtes intéressé par une partie de la différence entre les deux dates, vous devez utiliser à la place DateDiff ...

Par exemple: DATEDIFF (yy, startDate, endDate) YearsPassedSinceStart

retourne le pas. des années écoulées depuis la date de début.

De même pour trouver plusieurs mois, l'utilisation « m » comme datepart ou « d » pour déterminer non. de jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top