Jump to content
morg

Rozróżnianie Dużych I Małych Liter W Kodzie.

Recommended Posts

Witam

 

Czy znacie spośob pozwalający na rozróżnienie w kodzie dużych i małych liter?

 

Chcę napisać skrypt, który będzie walidował bazy Oracle ( 9, 10 i 11) W wersji 11 jest właśnie włączone rozróżnianie duzych i małych znaków. A część użytkowników jest z małych ( tu nie ma problemu a część z dużych.

 

Generalnie jest stały człon w nazwie a walidacja polega na wywołaniu skryptu po podłączeniu się sqlplus'em :

 

Stały człon : UZYTKOWNIK1, uzytkownik2

Zmienny człon: PRZEDROSTEK1, PRZEDROSTEK2, przedrostek3

 

Nazwa użytkownika bazodanowego dla Oracle 11: PRZEDROSTEK1_UZYTKOWNIK1; przedrostek3_UZYTKOWNIK1

Nazwa użytkownika bazodanowego dla Oracle 9,10: przedrostek3_uzytkownik2

 

 

Część osób zakłada użytkowników tylko z dużej, część tylko z małej, inni jak im się podoba. I tutaj mam problem bo skrypty się wykładają na nazwach pisanych z dużej - bo sqlplus twierdzi, że nie ma takiego użytkownika.

 

Czy znacie jakiś sposób na to ?

Share this post


Link to post
Share on other sites

Możesz w skrypcie użyć klasy znaków "upper" w sensie: grep -E [[:upper:]] plik lub cat plik | tr '[[:lower:]]' '[[:upper:]]' - od razu zamieniając znaki i działać dalej na zunifikowanym strumieniu

Share this post


Link to post
Share on other sites

Witam

 

Dziekuje za odpowiedz jednakze nie do konca mnie ona satysfakcjonuje. Oto fragment kodu wprowadzajacy cale zamieszanie:

 

Fukcje , które sie sprawdzaly do Oracle 10 wlacznie :

 

WyodrebnijUzytkownikaOracle()
{
	  pusty=`cat def | tail -1 `
	  pelny=`cat def | sed '/^$/d'| tail -1 `
 if [[ ${pusty} = ${pelny} ]]; then 
	  printf "\n" >>def
 fi
		   user=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | tr '[:upper:]' '[:lower:]' `
		   haslo=`cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | sed -e 's/-c//' | cut -d'/' -f2 |cut -d'@' -f1 | tr '[:upper:]' '[:lower:]' `
		   def_sid=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | cut -d'@' -f2 | tr '[:upper:]' '[:lower:]' `
		   sufix=`echo $user | sed 's/\def//g' | tr '[:upper:]' '[:lower:]' `
}

WyodrebnijUzytkownikaOraclePROC()
{
	  userPRC=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | sed 's/def/proc/g'`
   if [[ ${userPRC} = ${user}  ]] ; then
	  export userPRC=
   fi
}

 

 

I moja nieudana próba dostosowania do Oracle 11 w której usunalem konstrukcje upper:lower:

 

 

WyodrebnijUzytkownikaOracle()
{
	  pusty=`cat def | tail -1 `
	  pelny=`cat def | sed '/^$/d'| tail -1 `
 if [[ ${pusty} = ${pelny} ]]; then 
	  printf "\n" >>def
 fi
		   user=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | sed -e 's/-c//' | cut -d'/' -f1`
		   def_sid=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | cut -d'@' -f2`
		   sufix=`echo $user | sed 's/\def//g'`
}

 

WyodrebnijUzytkownikaOraclePROC()
{
	  userPRC=` cat def | sed '/^$/d'| tail -1 |  xargs -n1  echo |grep  '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | sed 's/def/proc/g'`
   if [[ ${userPRC} = ${user}  ]] ; then
	  export userPRC=
   fi
}

 

 

 

 

Funkcja WyodrebnijUzytkownikaOracle ma na celu wyciagniecie ze skryptów startujacych nazwe uzytkownika bazodanowego. W pierwotnej wersji miala na celu zunifikowanie wszystkiego do malych liter ( miedzy innymi do zakladania innych uzytkowników i importów plików dmp). Ale juz funkcje oparte na WyodrebnijUzytkownikaOraclePROC Swietnie sie sprawdzaly do Oracle 10 wlacznie.

 

W Oracle 11 mam wlaczone rozróznianie wielkich i malych liter i tutaj sie wykladaja moje skrypty. Wiem w jaki sposób uzyc oraklowego polecenia ` select` aby wyswietlic nazwy uzytkowników z danej instancji, ale wszystkie nazwy sa i tak zapisane duzymi literami.

 

Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa.

 

 

M.

Share this post


Link to post
Share on other sites

Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa.

Nie rozumiem o co dokladnie chodzi, ale jesli mowa o samym rozróznianiu to majac rozdzielony prefix od nazwy uzytkownika to:

echo PRZEDROSTEK1 | grep [!A-Z] # zwróci PRZEDROSTEK1
echo przedrostek3 | grep [!A-Z] # nic nie zwróci
echo PRZEDROSTEK1 | grep [!a-z] # nic nie zwróci
echo przedrostek3 | grep [!a-z] # zwróci przedrostek3

Btw. nie mozesz korzystac z jakiegos nowoczesnego jezyka skryptowego, jak np. Pythona? Twoje zycie staloby sie latwiejsze, a praca przyjemniejsza :)

Share this post


Link to post
Share on other sites

 

 

W Oracle 11 mam wlaczone rozróznianie wielkich i malych liter i tutaj sie wykladaja moje skrypty. Wiem w jaki sposób uzyc oraklowego polecenia ` select` aby wyswietlic nazwy uzytkowników z danej instancji, ale wszystkie nazwy sa i tak zapisane duzymi literami.

 

Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa.

 

 

M.

 

A to teraz rozumiem, czyli select z oracle 11 zwraca Ci zawsze duze literki i tyle. Jesli tak jest to nie ma takiej mozliwosci zebys w skrypcie shell-owym który odbiera te dane wykryl upper vs. lower, szukaj rozwiazania w selekcie i tyle, Szybki research w google pokazal ze mozesz uzyc REGEXP_LIKE zamiast LIKE w swoim selekcie..ale pewno juz próbowales...

Share this post


Link to post
Share on other sites

thof:

 

Zapomnialem dodac, ze moje maszyny maja okolo 10 lat. Niektóre ( HP-UX) z wielkim trudem przelknely powloke bash.

 

jszubiak:

 

Pójde Twoim tropem.

Poszukam w firmie osób wladajacych jezykiem sqlplus.

 

 

 

=====

 

 

 

Wracajac do pytania.

 

 

Czy istnieje polecenie badajace wielkosc liter w LINUX/UNIX?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...