ďťż
 
Triger a losowy ciag znakow ďťż
 
Triger a losowy ciag znakow
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Triger a losowy ciag znakow



Adam Wolny - 12-11-2006 01:32
Triger a losowy ciag znakow
  Witam
Mam w tabeli pole "znak" typu VARCHAR(20)
Wstawiam cos do tej tabeli i chcialbym:

- jezeli przy wstawianiu w pole "znak" wartosc <> NULL to normalnie wstawia
to co chcemy tam wstawic

- jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy ciag
znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i wszystkich
cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X
czyli np:

Xygawdnoiq23h7acnu8a

Jak to zrealizowac ?

Pozdrawiam





Michał Kuratczyk - 12-11-2006 01:32

  Adam Wolny wrote:
> - jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy
> ciag znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i
> wszystkich cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X
> czyli np:
>
> Xygawdnoiq23h7acnu8a
>
> Jak to zrealizowac ?
Nie podałeś jaka to baza ani z czym właściwie masz problem. Zakładając, że
z generowaniem stringów, to w Oracle masz do tego funkcję:

SQL> select 'X' || dbms_random.string('x', 19) from dual;

'X'||DBMS_RANDOM.STRING('X',19)
-----------------------------------
XQ8TWNL9DYQ9PMBTQFCH

Uwagi:

1) 'x' w wywołaniu funkcji nie ma nic wspólnego z X-em na początku. Jest to
po prostu argument mówiący o formacie stringa, który ma być wygenerowany
i oznacza "duże litery i cyfry".

2) to, że string jest losowy, to nie znaczy, że nigdy nie wylosuje się dwa
razy ten sam, więc jeśli chcesz, żeby to był unikalny identyfikator, to
musisz obsłużyć sytuację, gdy wystąpi wyjątek (generujesz kolejny string
i próbujesz znowu).

3) nie prościej skorzystać z sekwencji / autoincrement? Potrzebne Ci te
litery do czegoś?

--
Michał Kuratczyk




Maciej Łuszczyński - 12-11-2006 01:32

  > - jezeli przy wstawianiu w pole "znak" wartosc = NULL to wstawia losowy ciag
> znakow(dlugosci 20 znakow) skladajacy sie ze wszystkich liter i wszystkich
> cyfr ale jako pierwsza litera tego ciagu ma byc zawsze X
> czyli np:
>
> Xygawdnoiq23h7acnu8a
>
> Jak to zrealizowac ?
Witam.

Proponuje funkcje RAND().

Dla leniwych rozwiazanie ponizej:

DECLARE @Slownik varchar(100)
DECLARE @Wynik varchar(20)
DECLARE @i int

SET @Slownik = 'abcdefghijklmnopqrstuwxyz1234567890'
SET @i = 1
SET @Wynik = 'X'

WHILE @i < 20
BEGIN
SET @Wynik = @Wynik + SUBSTRING(@Slownik, CONVERT(int, 1 + RAND() *
(LEN(@Slownik) - 1)), 1)
SET @i = @i + 1
END

SELECT @Wynik

Pozdrawiam
Macko
--
*** A czym się różni Cray od normalnego peceta?
*** Tym, że Cray wykonuje pętle nieskończone w 10 sekund.




Adam Wolny - 12-11-2006 01:32

  baza to PostgreSQL





Adam Wolny - 12-11-2006 01:32

  A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe varchar(20)
ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby nie
mozna bylo wpisac tego samego tekstu.

tzn w bazie moglby by byc wiersze:

NULL
NULL
NULL
NULL
aseufdrtjudesfhvtfde
yhdrftgwqaloiwdstrwa

ale niedpopuszczalne by bylo:

aseufdrtjudesfhvtfde
aseufdrtjudesfhvtfde
yhdrftgwqaloiwdstrwa




Sławomir Szyszło - 12-11-2006 01:32

  Dnia Fri, 29 Sep 2006 17:51:23 +0200, "Adam Wolny" <adamwolny@wp.pl>
wklepał(-a):

>A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe varchar(20)
>ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby nie
>mozna bylo wpisac tego samego tekstu.

A od kiedy to NULL jest uwzględniany w kluczu unikalnym?
http://www.postgresql.org/docs/8.1/s...s.html#AEN2016

Załóż constraint unique i po sprawie.
--
Sławomir Szyszło mailto:slaszysz@poczta.onet.pl
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?grou...mp.bazy-danych




Wojtek pBT - 12-11-2006 01:32

  Dnia 29-09-2006 o 17:51:23 Adam Wolny <adamwolny@wp.pl> napisał(a):

> A czy w PostgreSQL da sie zalozyc unikalny kucz na pole tekstowe
> varchar(20)
> ale tak zeby to dzialalo ze puste(NULL) takie pola moga byc tylko zeby
> nie
> mozna bylo wpisac tego samego tekstu.

WG specyfikacji SQL

NULL != NULL

A czy postgres powoli założyć index UNIQUE, to sobie sprawdz

pBT

--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/




Adam Wolny - 12-11-2006 01:32

 
> A od kiedy to NULL jest uwzględniany w kluczu unikalnym?
> http://www.postgresql.org/docs/8.1/s...s.html#AEN2016
>
> Załóż constraint unique i po sprawie.

dzieki wielki zabieram sie za czytanie :)




Paweł Matejski - 12-11-2006 01:33

  Wojtek pBT wrote:
>
> WG specyfikacji SQL
>
> NULL != NULL

To nie jest prawda! ;)

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8 [MySQL] - konwersja polskich znaków i jeszcze małe "conieco" MySQL 4.1.21, problem z porządkowaniem polskich znaków diakrytycznych [mysql/linux] problem z kodowaniem polskich znakow Jak sprawdzić kodowanie znaków bazy MS SQL ? jak wymusic sortowanie mysql dla znakow kodowanych w cp1250 Uzywanie polskich znakow w bazie danych MYSQL Pytanie SQL spacja przed i za ciagiem znakow mysqldump i kodowanie utf-8 (brak polskich znakow) PHP działający samoczynnie
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ptsite.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com