Автор Тема: Оръкал скрипт за търкане от база  (Прочетена 2352 пъти)

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Здравейте ,
Да ви питам някой може знае ли как да направим един скрипт  за оракъл. Да кажем че имам юсер  ntrance  с парола ntrance   влизам с тях  в Shema(ntrance) така и вътре има  100 таблици някъде с много записи. Та въпроса са ми е как да затрия записи по стари  примерно от 10 дни.
Благодаря предварително.
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #1 -: Mar 08, 2011, 14:20 »
Здравейте ,
Да ви питам някой може знае ли как да направим един скрипт  за оракъл. Да кажем че имам юсер  ntrance  с парола ntrance   влизам с тях  в Shema(ntrance) така и вътре има  100 таблици някъде с много записи. Та въпроса са ми е как да затрия записи по стари  примерно от 10 дни.
Благодаря предварително.
А да се намира някаква колона с дата(таймстамп) на инсерт/ъпдейт?
Активен

0x2B|~0x2B

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #2 -: Mar 08, 2011, 14:27 »
Да  има си дата , час , година , ъпдейт ,инсърт и тн
Активен

nforcer2

  • Участници
  • ***
  • Публикации: 11
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #3 -: Mar 08, 2011, 17:18 »
Нещо такова
Код:
DELETE  FROM TABLE_NAME WHERE CREATED_DATE < SYSDATE-10
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #4 -: Mar 08, 2011, 18:34 »
Нещо такова
Код:
DELETE  FROM TABLE_NAME WHERE CREATED_DATE < SYSDATE-10
нищо такова!!!
Код:
SQL>  select count(*) from SCI_USERS WHERE CREATED_DATE < SYSDATE-1;
 select count(*) from SCI_USERS WHERE CREATED_DATE < SYSDATE-1
                                      *
ERROR at line 1:
ORA-00904: "CREATED_DATE": invalid identifier
това е вярно само ако имаш колона с такова име и формата е date. Но имам спомени че на 11 препоръчват да се ползва timestamp
Активен

0x2B|~0x2B

spec1

  • Напреднали
  • *****
  • Публикации: 230
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #5 -: Mar 08, 2011, 22:47 »
1. С коя версия си ?
Влизайки от конзолата , sqlplus ...  ти дава достатъчно информация
за версията на базата.
2. За всяка таблица,можеш да видиш какви полета има с:
 desc <table_name>;
И съотв. триеш данните,както са те посъветвали колегите по-горе
Активен

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #6 -: Mar 08, 2011, 23:02 »
1. С коя версия си ?
Влизайки от конзолата , sqlplus ...  ти дава достатъчно информация
за версията на базата.
2. За всяка таблица,можеш да видиш какви полета има с:
 desc <table_name>;
И съотв. триеш данните,както са те посъветвали колегите по-горе

(envy)  . Ако имаш решение кажи го неми казвай какво  каде има. Ако знам къде да го намеря и как да го направя няма да поствам пост тука .  Версия 10г     отностно  sqlplus   сигурно има възможности , но не ги знам. Относно полетата знам ги и ги виждам  по горе това което те са казали не върши работа.

И както казах неискам само от една таблица искам от цялата база да търка.
« Последна редакция: Mar 08, 2011, 23:04 от ntrance »
Активен

spec1

  • Напреднали
  • *****
  • Публикации: 230
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #7 -: Mar 08, 2011, 23:42 »
  Ами най-добре се поразрови в интернет да видиш как се прави.
 Имаш голям брой таблици,предполага се че имат различни полета,
с различни типове данни и т.н.
  Трябва да си напишеш напр. PL/SQL скрипт който да обхожда всички таблици  и да трие (delete from ... where ...) съотв. записи ...
  Можеш да видиш напр. таблиците в твоята схема с:
select * from tab;
 Не може да ти се даде ей така просто и универсално решение.
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #8 -: Mar 09, 2011, 00:43 »
Да  има си дата , час , година , ъпдейт ,инсърт и тн
къде са записани тези данни, в какъв форма, как са свързани таблиците?
.
  Можеш да видиш напр. таблиците в твоята схема с:
select * from tab;
...
Хубаво си чувал че има и такова нещо като PL/SQL
и таблиците се виждат така:
Код:
select table_name from user_tables;
iли
Код:
select table_name from all_tables where owner = 'imeto na potrebitelia';
« Последна редакция: Mar 09, 2011, 00:46 от romeo_ninov »
Активен

0x2B|~0x2B

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #9 -: Mar 09, 2011, 11:42 »
Мерси  оправих се :) благодаря за  насочването
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #10 -: Mar 09, 2011, 14:09 »
Мерси  оправих се :) благодаря за  насочването
не искаш ли да споделиш малко детайли?
Активен

0x2B|~0x2B

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Оръкал скрипт за търкане от база
« Отговор #11 -: Mar 31, 2011, 21:30 »
Чак сега го виждам ми защо не ;) Той стана цял скрипт.

Код
GeSHi (Bash):
  1. #!/bin/sh
  2.  
  3. verbose="y"
  4. debug=""
  5. error=0
  6. script_dir=`dirname $0`
  7.  
  8. opt=""
  9. while test "X$1" != "X" ; do
  10.    case "X$1" in
  11.        X-v) verbose="y" ; shift ;;
  12.        X-q) verbose="" ; shift ;;
  13.        X-debug) debug="y" ; shift ;;
  14.        X-a) adminticket="y" ; shift ;;
  15.        X-*) echo "Unknown option $1" ; error=1 ; shift ;;
  16.        X*) break ;;
  17.    esac
  18. done
  19.  
  20. if test "X$1" = "X" ; then
  21.    error=1
  22. else
  23.    adminuser="$1"
  24.    shift
  25. fi
  26.  
  27.  
  28. if test "X$1" = "X" ; then
  29.    error=1
  30. else
  31.    fechaLimite="$1"
  32.    shift
  33. fi
  34.  
  35.  
  36. if test "X$adminuser" = "X" -o $error = 1 ; then
  37.    echo "Uso: $0 [-v|-q] [-debug] [-a]  user <FechaLimite>"
  38.  
  39.    exit 1
  40. fi
  41.  
  42.  
  43. if  echo "whenever sqlerror exit failure";
  44. echo "DELETE FROM table-name  WHERE table <to_date('"$fechaLimite"','YYYY-MM-DD HH24:MI:SS');" | sqlplus -S $adminuser ;
  45.  
  46.  
  47. then
  48.    echo "DONE"
  49. else
  50.   echo "FAILED"
  51.   exit 1
  52. fi
  53.  
Стартира се така ;) 
Код
GeSHi (Bash):
  1. ./scriptname.sh     user/user@sid-name      "2011-02-24"

Така ще затрие  всичко по старо от 2011-02-24
« Последна редакция: Apr 01, 2011, 16:45 от ntrance »
Активен