Skocz do zawartości

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


morg

Rekomendowane odpowiedzi

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 ?

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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 :)

Odnośnik do komentarza
Udostępnij na innych stronach

 

 

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...

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 weeks later...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...