2015-03-12 18 views
6

Używam bazy danych Oracle SQL i muszę wstawić wartość pieniężną (wynagrodzenie) jako część wiersza. Z jakiegoś dziwnego powodu komenda pieniędzy nie działa, czy są jakieś alternatywy, które by z tym działały?Typ danych SQL do użycia podczas wstawiania pieniędzy

format wejściowy danych: 00,000.000 £

CREATE TABLE staff 
        (staffno CHAR(6) NOT NULL 
        , staffsurname VARCHAR(8) NOT NULL 
        , staffforename VARCHAR(7) NOT NULL 
        , salary MONEY NOT NULL 
        , PRIMARY KEY (staffno) 
        ); 
+0

Oracle, moje przeprosiny - stały znacznik. – user3686991

+2

Oracle zaleca stosowanie 'varchar2()' zamiast 'varchar()' dla łańcuchów, jako notatkę. –

Odpowiedz

5

Spójrz na tej linii

salary MONEY NOT NULL 

Nie ma pieniędzy istniejący typ danych.

Jeśli szukasz czegoś podobnego do małego typu pieniężnego SQL-Server, chcesz użyć numeru Number(10,4), a następnie sformatuj numer.

można sformatować liczbę używając to_char funkcję

select to_char(yourColumn, '$99,999.99') from yourTable where someCondition 
+0

Nie ma front-end do tej aplikacji, tylko strukturyzowanie bazy danych (jestem studentem, więc to właśnie ćwiczy przy użyciu oracle Akademii), więc nie mogę przetworzyć łańcucha. – user3686991

+0

@ user3686991 patrz edycja. –

+0

Na przykład, jeśli moje dane wejściowe były: 45 000,00 GBP. Czy to działa przy użyciu VARCHAR (7,2)? – user3686991

3

"dziwne" Powód jest prosty: There is no MONEY data type.

Typ danych najbardziej odpowiedni dla wartości pieniężnych będzie NUMBER (przy użyciu odpowiedniej skali ). Ponieważ jest to typ zmiennoprzecinkowy o rozmiarze dziesiętnym, lepiej nadaje się on do wartości pieniężnych niż zmiennoprzecinkowe typy BINARY_FLOAT i BINARY_DOUBLE.

Uwaga jednak, że będzie trzeba jeszcze parse ciąg wejściowy £00,000.000 w przedniej i wysłać go jako wartość numeryczną do tylnego końca.

+0

Okay i jaki byłby właściwy format do wstawienia wartości pieniężnej w wysokości 00 000,00 GBP? – user3686991

+0

wartość pieniężna równa zero to po prostu "0". –