Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ошибка в анонимном блоке  [new]
Лера Халера
Member

Откуда:
Сообщений: 5
Имеется таблица и анонимный блок, в котором есть ошибка, задание такое мол найди исправь ошибки и все. Ну я подправила некоторые моменты в селекте и еще в пару местах теперь выдает другую ошибку, Я понимаю, что решается это легко, но словила стоп в голове. Извините если напрягаю)))

create table SH_TEST_SH_TEST_VIEW_HISTORY
(
cust_id NUMBER not null,
cust_sys_code VARCHAR2(32) not null,
cust_name VARCHAR2(256),
calc_date DATE
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 80K
next 1M
minextents 1
maxextents unlimited
)
compress
nologging;
/
create index SH_TEST_VIEW_HISTORY_D on SH_TEST_SH_TEST_VIEW_HISTORY (CALC_DATE)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
)
nologging;
/

DECLARE
l_Cnt_Del NUMBER;
BEGIN
Dbms_Mview.Refresh('SH_TEST_SH_TEST_VIEW_HISTORY', Atomic_Refresh => FALSE);
Dbms_Stats.Gather_Table_Stats(Ownname => 'SH_TEST',
Tabname => 'SH_TEST_VIEW_MV',
Estimate_Percent => 10,
Method_Opt => 'FOR ALL COLUMNS SIZE 1',
Degree => 4,
Cascade => FALSE,
No_Invalidate => FALSE);
INSERT --+ append
INTO SH_TEST_SH_TEST_VIEW_HISTORY
SELECT Trunc(SYSDATE),cvh.cust_id,cvh.calc_date,cvh.cust_name
FROM SH_TEST_SH_TEST_VIEW_HISTORY Cvh;
DELETE FROM SH_TEST_SH_TEST_VIEW_HISTORY Cvh
WHERE Cvh.Calc_Date < Trunc(SYSDATE) - 14;
l_Cnt_Del := SQL%ROWCOUNT;
COMMIT;

IF l_Cnt_Del > 0 THEN
EXECUTE IMMEDIATE 'alter table SH_TEST_SH_TEST_VIEW_HISTORY shrink space cascade';
EXECUTE IMMEDIATE 'alter index SH_TEST_VIEW_HISTORY_D rebuild';
END IF;
Sys.Dbms_Stats.Gather_Table_Stats(Ownname => 'SH_TEST',
Tabname => 'SH_TEST_VIEW_HISTORY',
Estimate_Percent => 10,
Method_Opt => 'FOR ALL COLUMNS SIZE 1',
Degree => 4,
Cascade => TRUE,
No_Invalidate => FALSE);
END;


Ошибка: Error report -
ORA-06550: Строка 14, столбец 13:
PL/SQL: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено DATE
ORA-06550: Строка 12, столбец 3
16 ноя 20, 10:49    [22232681]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Лера Халера
SELECT Trunc(SYSDATE),

Это по
Лера Халера
PL/SQL: ORA-00932:


Какой функционал была попытка заложить в этот код?
16 ноя 20, 11:08    [22232696]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
env,

Я так понимаю, из приведенного надо соорудить валидный скрипт матвью + скрипт рефреша
16 ноя 20, 11:17    [22232699]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Лера Халера
Member

Откуда:
Сообщений: 5
env, Там выше вперед написали. В общем поменяла sysdate.
теперь такое вылазит
ORA-23401: материализованное представление "SYS"."SH_TEST_SH_TEST_VIEW_HISTORY" не существует
16 ноя 20, 11:28    [22232705]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Лера Халера,

Наверное, потому что его нет. Открываете документацию и читаете, что же такое materialized view.
16 ноя 20, 11:43    [22232725]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Лера Халера
Member

Откуда:
Сообщений: 5
env, это я поняла, теперь другой вопрос. Можно ли засунуть материализованное представление в мой begin? именно создание или нужно все же создавать отдельно ?
16 ноя 20, 12:07    [22232759]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
Лера Халера
env, это я поняла

Вам надо понять что должен делать скрипт
ошибок не будет, а скрипт выполняет левую работу

напр
insert сохраняет все (откуда?) , а удаляет за две недели (где?)

SH_TEST_SH_TEST_VIEW_HISTORY таблица (create),
Refresh('SH_TEST_SH_TEST_VIEW_HISTORY', таблицы?

и тд

.....
stax
16 ноя 20, 12:32    [22232781]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7136
Для начала, используйте SRC
Лера Халера
Имеется таблица и анонимный блок, в котором есть ошибка, задание такое мол найди исправь ошибки и все. Ну я подправила некоторые моменты в селекте и еще в пару местах теперь выдает другую ошибку, Я понимаю, что решается это легко, но словила стоп в голове. Извините если напрягаю)))

create table SH_TEST_SH_TEST_VIEW_HISTORY
(
  cust_id                NUMBER not null,
  cust_sys_code          VARCHAR2(32) not null,
  cust_name              VARCHAR2(256),  
  calc_date              DATE
)

create table SH_TEST_SH_TEST_VIEW_HISTORY
(
  cust_id                NUMBER not null,
  cust_sys_code          VARCHAR2(32) not null,
  cust_name              VARCHAR2(256),  
  calc_date              DATE
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 80K
    next 1M
    minextents 1
    maxextents unlimited
  )
compress
nologging;
/

create index SH_TEST_VIEW_HISTORY_D on SH_TEST_SH_TEST_VIEW_HISTORY (CALC_DATE)
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  )
  nologging;
/


DECLARE
  l_Cnt_Del NUMBER;
BEGIN
  Dbms_Mview.Refresh('SH_TEST_SH_TEST_VIEW_HISTORY', Atomic_Refresh => FALSE);
  Dbms_Stats.Gather_Table_Stats(Ownname          => 'SH_TEST',
                                Tabname          => 'SH_TEST_VIEW_MV',
                                Estimate_Percent => 10,
                                Method_Opt       => 'FOR ALL COLUMNS SIZE 1',
                                Degree           => 4,
                                Cascade          => FALSE,
                                No_Invalidate    => FALSE);
  INSERT --+ append
  INTO SH_TEST_SH_TEST_VIEW_HISTORY
    SELECT  Trunc(SYSDATE),cvh.cust_id,cvh.calc_date,cvh.cust_name
      FROM SH_TEST_SH_TEST_VIEW_HISTORY Cvh;
  DELETE FROM SH_TEST_SH_TEST_VIEW_HISTORY Cvh
   WHERE Cvh.Calc_Date < Trunc(SYSDATE) - 14;
  l_Cnt_Del := SQL%ROWCOUNT;
  COMMIT;

  IF l_Cnt_Del > 0 THEN
    EXECUTE IMMEDIATE 'alter table SH_TEST_SH_TEST_VIEW_HISTORY shrink space cascade';
    EXECUTE IMMEDIATE 'alter index SH_TEST_VIEW_HISTORY_D rebuild';
  END IF;
  Sys.Dbms_Stats.Gather_Table_Stats(Ownname          => 'SH_TEST',
                                    Tabname          => 'SH_TEST_VIEW_HISTORY',
                                    Estimate_Percent => 10,
                                    Method_Opt       => 'FOR ALL COLUMNS SIZE 1',
                                    Degree           => 4,
                                    Cascade          => TRUE,
                                    No_Invalidate    => FALSE);
END;


Ошибка: Error report -
ORA-06550: Строка 14, столбец 13:
PL/SQL: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено DATE
ORA-06550: Строка 12, столбец 3


Что тут непонятного (не считая всего остального):
Так как не указали порядок столбцов, пытаетесь в
  
cust_id                NUMBER not null,

Вставить DATE
 Trunc(SYSDATE)
16 ноя 20, 13:38    [22232879]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Лера Халера
Member

Откуда:
Сообщений: 5
Vadim Lejnin, это я все поменяла. Сейчас вылазит другая ошибка и с ней вопрос, можно ли в begin запихнуть создание materialized view?
16 ноя 20, 15:47    [22233036]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Лера Халера,

Откройте уже доку. Если очень извернуться, то конечно можно. Но не нужно.
16 ноя 20, 15:51    [22233039]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
Лера Халера,

Можно сделать все. Непонятно, что тебе нужно. Задачу опиши с самого начала.
17 ноя 20, 01:43    [22233436]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Лера Халера
Member

Откуда:
Сообщений: 5
oragraf, мне просто поставили задачу исправить ошибки в коде, не сказали, что за код и что он выполняет. Просто найти и справить ошибки. Кручусь, как могу.
17 ноя 20, 13:26    [22233673]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
Лера Халера,

студент?

1 Разобраться с именованием объектов. sh_test - это схема.
2. Соорудить матвью on demand с запросом на основе приведенных insert/delete. Данные из таблицы в матвью.
3. добавить слешей и точек с запятыми где нужно.
4. в блоке оставить рефреш + сбор статистики по правильным объектам
17 ноя 20, 17:21    [22233988]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
vita0609
Member

Откуда:
Сообщений: 3
oragraf,
это задача на собеседовании в одну из организаций (знаю в какую)).
18 ноя 20, 09:19    [22234364]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
dmdmdm
Member

Откуда: Нижний Новгород
Сообщений: 1647
Если они так принимают на работу, с вероятностью, близкой, к 100%, они почитывают sql.ru.

Учтите это, Лера :).
18 ноя 20, 09:33    [22234370]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
vita0609,

Озвучьте, чтобы сразу туда не ходить. А то вдруг вопрос из боевого кода.
18 ноя 20, 09:34    [22234371]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
vita0609
Member

Откуда:
Сообщений: 3
env,
не могу так поступить.
ошибки тоже не могу выложить. Наткнулся случайно)
18 ноя 20, 09:42    [22234377]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
vita0609
oragraf,
это задача на собеседовании в одну из организаций (знаю в какую)).
Я сдал?(с)
18 ноя 20, 10:41    [22234408]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
graycode
Member

Откуда:
Сообщений: 468
oragraf
Я сдал?(с)

На хрустальный шар 80-го уровня? Да, но это не точно))
18 ноя 20, 14:51    [22234632]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
graycode
Member

Откуда:
Сообщений: 468
create table SH_TEST_HISTORY
(
  cust_id                NUMBER not null,
  cust_sys_code          VARCHAR2(32) not null,
  cust_name              VARCHAR2(256),  
  calc_date              DATE
);

ALTER TABLE SH_TEST_HISTORY ENABLE ROW MOVEMENT;

create index SH_TEST_HISTORY_D on SH_TEST_HISTORY (CALC_DATE);

insert into SH_TEST_HISTORY 
select level, to_char(level), 'bla-bla', trunc(sysdate) - level
from dual connect by level <= 30;

DECLARE
  l_Cnt_Del NUMBER;
BEGIN
  DELETE FROM SH_TEST_HISTORY Cvh
   WHERE Cvh.Calc_Date < Trunc(SYSDATE) - 14;
  l_Cnt_Del := SQL%ROWCOUNT;
  COMMIT;

  IF l_Cnt_Del > 0 THEN
    EXECUTE IMMEDIATE 'alter table SH_TEST_HISTORY shrink space cascade';
    EXECUTE IMMEDIATE 'alter index SH_TEST_HISTORY_D rebuild';
  END IF;
      Dbms_Stats.Gather_Table_Stats(Ownname          => 'SH_TEST',
                                    Tabname          => 'SH_TEST_HISTORY',
                                    Estimate_Percent => 10,
                                    Method_Opt       => 'FOR ALL COLUMNS SIZE 1',
                                    Degree           => 4,
                                    Cascade          => TRUE,
                                    No_Invalidate    => FALSE);
END;
/

select * from SH_TEST_HISTORY;

Однако чего хотел автор задачи так и остается загадкой ...
18 ноя 20, 15:25    [22234664]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
vita0609
Member

Откуда:
Сообщений: 3
graycode,
тут же все понятно. Автор хотел чтобы вы дали готовое и правильное решение задачи для собеседования. И по возможности объяснили в чем суть. Самому/самой подумать разобрать что для чего нужно, нет особого желания. В оракл засунуть код и посмотреть какие ошибки будут, когда не созданы ни таблицы ни схемы..)
18 ноя 20, 17:49    [22234809]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
graycode
Member

Откуда:
Сообщений: 468
vita0609,

Про автора топика все понятно, а вот чего хотел автор самой задачи для собеседования непонятно, выше oragraf предположил что цель это создание материализованного представления, я же наоборот выкинул все что касается mv, собственно при отсутствии задачи можно нафантазировать что угодно, так чего в итоге в качестве ответа там хотели увидеть?))
18 ноя 20, 17:59    [22234816]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9278
graycode

...так чего в итоге в качестве ответа там хотели увидеть?))

begin
  null;
end;
/ 


?
делает ровно то же (при отсутвие таблиц, представлений), зато ошибок нет
18 ноя 20, 18:32    [22234834]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в анонимном блоке  [new]
graycode
Member

Откуда:
Сообщений: 468
Leonid Kudryavtsev,

Это был первый вариант ответа, который решает поставленную задачу: "задание такое мол найди исправь ошибки и все", наиболее оптимальным образом.

PS: самым самым первым вариантом было удалить весь код, нет кода, нет ошибок ...

Сообщение было отредактировано: 18 ноя 20, 18:40
18 ноя 20, 18:44    [22234850]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить