Aylık arşivler: Ekim 2014

linux kelime dosyada yer alıyor mu

Linux’ta bir kelimenin (string) bir dosyada yer alıp almadığını bulan shell script.
Aşağıdaki kod bir sh dosyasına (searched_string_in_file.sh) kaydedilip kullanılabilir.

# return
# 0: searched string found in file
# 1: searched string not found in file
# 2: file not found
# 3: wrong parameters send
# 9: help

echo_usage() {
  echo "usage: search_string.sh /full/file/path.ext serched_string"
  echo "or"
  echo "usage: search_string.sh /full/file/path.ext \"serched string\""
  echo ""
}

if [ -n "$1" ]; then
  if [ "$1" == "help" ]; then
    echo_usage
    exit 9
  else
    if [ -n "$2" ]; then
      # does file exist in current working directory or in full path
      # does file exist
      # does string place in file
      if [ -f "$1" ]; then
        echo "OK"
        is_ok=`grep "$2" "$1"`
        if [ $is_ok == "" ]; then
          echo "found"
          exit 0
        else
          echo "searched string not found"
          exit 1
        fi
      else
        echo "file not found"
        exit 2
      fi
    else
      echo_usage
      exit 3
    fi
  fi
else
  echo_usage
  exit 3
fi

oracle uzun bir sql ifadesinde erişilen tablo listesi

Oracle’da çok uzun sql ifadelerinde hangi tablolara erişildiğini bulmak için,

1) $ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL da yer alan dosyanın içindeki sql ifadeleri çalıştırılarak PLAN_TABLE tablosu oluşturulur. Bu dosya oracle’ın oluşturduğu execution plan’ın tablo yapısını içerir.

2) Aşağıdaki sql ile plan tablomuza çok uzun sql ifadesinin execution planı insert edilir.

EXPLAIN PLAN
INTO PLAN_TABLE
FOR
SELECT kolon1, kolon2 FROM tablo1; -- burada çok uzun sql ifade(leri)miz yer alacak

3) Aşağıdaki sql ifadesi ile yukarıdaki sql ifadesinde erişilen tabloların listesi elde edilir.

SELECT DISTINCT OBJECT_OWNER, OBJECT_NAME
FROM PLAN_TABLE
WHERE OPERATION = 'TABLE ACCESS'
ORDER BY 1,2

kaynak: docs.oracle.com/cd/B10500_01/server.920/a96533/ex_plan.htm