Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mala caka - ko zna? Dozvoljen samo unos brojeva - is_number()

[es] :: Oracle :: Mala caka - ko zna? Dozvoljen samo unos brojeva - is_number()

[ Pregleda: 4606 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Mala caka - ko zna? Dozvoljen samo unos brojeva - is_number()28.12.2004. u 10:03 - pre 218 meseci
Kako na nivou ograničenja u bazi (constraint) dozvoliti unos samo brojeva u polje znakovnog tipa (char/varchar) u nekoj tabeli?

Korisno za JMBG ili PIB - sastoje se samo od brojeva, ali imaju vodeće nule pa moraju biti znakovnog tipa.

// Edit by StRiPy: Izmijenio sam samo naslov teme, radi lakseg snalazenja.

[Ovu poruku je menjao StRiPy dana 08.04.2005. u 17:01 GMT+1]
Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Mala caka - ko zna?29.12.2004. u 02:15 - pre 218 meseci
Hm, ne znam da li sam dobro shvatio pitanje, ali pokusacu odgovoriti.
Prvo kreiraj funkciju is_number.
Code:

CREATE OR REPLACE FUNCTION is_number (
  char_in VARCHAR2)
  RETURN BOOLEAN
IS

n  NUMBER;

BEGIN
  n := TO_NUMBER(char_in);

  RETURN TRUE;

EXCEPTION
  WHEN OTHERS THEN
    RETURN FALSE;

END is_number;
/

Zatim kreiraj tabelu sa poljem na koje ces staviti constraint CHECK:
Code:

...
broj VARCHAR2(100),
CONSTRAINT samo_brojevi CHECK(is_number(broj))

ili ako ces imas postojecu tabelu, onda sa ALTER:
Code:

ALTER TABLE tabela
ADD CONSTRAINT samo_brojevi CHECK(is_number(broj));

Nadam se da je to ono na sta si mislio ...
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Mala caka - ko zna?29.12.2004. u 07:47 - pre 218 meseci
Dobro si razumeo. Rešenje je ok, ali nije baš elegantno...

Dakle, string funkcije LTRIM(Param1, Param2) i RTRIM(Param1, Param2) trimuju string Param1 sa leve, odnosno desne strane, znakovima koji se nalaze u Param2 sve dok ne naidju na nesto čega nema u Param2 i vraćaju ostatak stringa.

Ako se string Param1 sastoji samo od cifara, LTRIM(Param1, '0123456789') vraća NULL. Ograničenje bi trebalo da izgleda ovako:
Code:

ALTER TABLE Neka_Tabela ADD CONSTRAINT SAMO_BROJ
         CHECK ( LTRIM(NekoPolje,'0123456789') IS NULL )

Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Mala caka - ko zna?08.04.2005. u 15:56 - pre 214 meseci
A sta ako ne unosis samo cifre, nego se unos sastoji i od cifara i od slova?

Npr. imas string test = 'trim0123bla_fake456789trim' i ako koristis LTRIM(test,'trim') i RTRIM(test,'trim'), dobices nazad trimovani string, ali ce on i dalje sadrzavati slova zajedno sa ciframa.

Zato je ono moje rjesenje sigurnije i bolje.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

CandyMan

Član broj: 3420
Poruke: 147



+49 Profil

icon Re: Mala caka - ko zna? Dozvoljen samo unos brojeva - is_number()13.04.2005. u 13:23 - pre 214 meseci
Želimo da zabranimo unos stringa koji u sebi ne sadrži samo brojeve. Ukoliko trimovanje stringa navedenim stringom 0123456789 vrati neku vrednost, string koji želimo da upišemo u bazu ne zadovoljava uslov da sadrži samo brojeve i kao takav uzrokuje grešku i tako dalje redom.
Nije mi baš jasno, šta hoćeš da kažeš sa tim bolje rešenje?
Nisam ni znao da znam dok nisam prob'o!
 
Odgovor na temu

[es] :: Oracle :: Mala caka - ko zna? Dozvoljen samo unos brojeva - is_number()

[ Pregleda: 4606 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.