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

Откуда: Тольятти
Сообщений: 103
Подскажите пожалуста правильно ли я написал запрос?
Если нет, то что не верно?

[/SRC]/*
1. Создайте таблицу TEST2 с колонками (ID числовое(3), PARENT_ID числовое, STR текстовое).
Колонка ID будет являться первичным ключом, а PARENT_ID будет ссылаться на ID. 
Так же создайте одну проверку на то, что ID <> PARENT_ID и в STR нет символов "99".
2. Проверьте, как работают ограничители в операторе INSERT
Подсказка: CREATE TABLE (..., CONSTRAINT ...)
*/
CREATE TABLE TEST2 ( ID NUMBER(3)CHECK(PARENT_ID != '99'),PARENT_ID NUMBER CHECK(PARENT_ID != '99'), STR VARCHAR2(40)CHECK(PARENT_ID != '99'));
ALTER TABLE TEST2
ADD CONSTRAINT TEST2PK PRIMARY KEY (ID);

ALTER TABLE TEST2
ADD CONSTRAINT TEST2FK FOREIGN KEY (PARENT_ID)REFERENCES SALESREPS (ID);
/*SELECT * FROM TEST2 WHERE PARENT_ID NOT LIKE '99' AND ID NOT LIKE '99' AND STR NOT LIKE '99';*/

CREATE TABLE TEST2 (ID NUMBER(3), CONSTRAINT TEST2 CHECK (id ='99'));
28 ноя 14, 14:24    [16919462]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
Тролин
Guest
IShapovalov,

на листочек двадцать раз перепеши....


Где проверка ID <> PARENT_ID ?
и зачем куча проверок с 99? если надо только для STR
28 ноя 14, 14:42    [16919623]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
Тролин, протупил исправил

/*
1. Создайте таблицу TEST2 с колонками (ID числовое(3), PARENT_ID числовое, STR текстовое).
Колонка ID будет являться первичным ключом, а PARENT_ID будет ссылаться на ID. 
Так же создайте одну проверку на то, что ID <> PARENT_ID и в STR нет символов "99".
2. Проверьте, как работают ограничители в операторе INSERT
Подсказка: CREATE TABLE (..., CONSTRAINT ...)
*/
CREATE TABLE TEST2 ( ID NUMBER(3),PARENT_ID NUMBER CHECK(PARENT_ID > ID)ENABLE,
STR VARCHAR2(40)CHECK(STR = '99')ENABLE);

ALTER TABLE TEST2
ADD CONSTRAINT TEST2PK PRIMARY KEY (ID);

ALTER TABLE TEST2
ADD CONSTRAINT TEST2FK FOREIGN KEY (PARENT_ID)REFERENCES SALESREPS (ID);

INSERT INTO TEST2 (ID CHECK (ID < PARENT_ID)ENABLE) VALUES ('44');
28 ноя 14, 14:50    [16919684]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
mRdUKE
Member

Откуда: ТЛТ
Сообщений: 494
IShapovalov,

Документацию читать лень, земляк?

CREATE TABLE TEST2 (
        ID NUMBER(3)
        ,PARENT_ID NUMBER
        ,STR VARCHAR2(100)
        ,CONSTRAINT c_str CHECK (STR<>'99')
        ,CONSTRAINT c_id_parent CHECK (ID<>PARENT_ID)
        ,CONSTRAINT pk_id_test2 PRIMARY KEY(ID) 
                    )
28 ноя 14, 14:59    [16919750]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
mRdUKE, я английский только учу, я могу читать документацию, но с моим уровнем знания английского это будет очень медлено. Да похоже земляк.
28 ноя 14, 15:05    [16919813]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
mRdUKE, а почему CONSTRAINT c_str CHECK (STR<>'99'), а не CONSTRAINT c_str CHECK (STR != '99')?
А внутарь запросо так же как и первичный ключь получается можно засунуть и вторичный?
28 ноя 14, 15:11    [16919868]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
mRdUKE, а зачем вы подписали к имени столбца "c_"? Это что то означает?
28 ноя 14, 15:13    [16919896]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
IShapovalov, вроде разобрался "с"- значит то что ограничение, а <> эквивалент !=.
А как в INSERT огранечения засунуть?
CREATE TABLE TEST2 (
        ID NUMBER(3)
        ,PARENT_ID NUMBER
        ,STR VARCHAR2(100)
        ,CONSTRAINT c_str CHECK (STR<>'99')
        ,CONSTRAINT c_id_parent CHECK (ID<>PARENT_ID)
        ,CONSTRAINT pk_id_test2 PRIMARY KEY(ID) 
        ,CONSTRAINT fk_id_parent FOREIGN KEY(c_id_parent) REFERENCES SALESREPS (ID));

INSERT INTO TEST2  (ID , PARENT_ID, STR ) VALUES ('44', '55', rdr) CONSTRAINT ID  CHECK (STR<>'99') ;
28 ноя 14, 15:27    [16920048]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
mRdUKE
Member

Откуда: ТЛТ
Сообщений: 494
IShapovalov
вроде разобрался "с"- значит то что ограничение...

не разобрался.. - это проф. заболевание

IShapovalov
А как в INSERT огранечения засунуть?

никак

тяжело тебе будет, сколько лет, почему не в армии, зачем Oracle? )
28 ноя 14, 15:37    [16920142]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
123йй
Member

Откуда:
Сообщений: 1637
IShapovalov
я могу читать документацию....А как в INSERT огранечения засунуть?

ну так читайте
28 ноя 14, 15:38    [16920152]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
IShapovalov
Member

Откуда: Тольятти
Сообщений: 103
mRdUKE, 23, да что то не хочется в армию, на курсы хожу по java, в комплекте Oracle.
28 ноя 14, 15:46    [16920256]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
123йй
Member

Откуда:
Сообщений: 1637
mRdUKE
IShapovalov
А как в INSERT огранечения засунуть?

никак
тоже читать доку
28 ноя 14, 15:58    [16920398]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
stax..
Guest
IShapovalov
IShapovalov, вроде разобрался "с"- значит то что ограничение, а <> эквивалент !=.
А как в INSERT огранечения засунуть?
CREATE TABLE TEST2 (
        ID NUMBER(3)
        ,PARENT_ID NUMBER
        ,STR VARCHAR2(100)
        ,CONSTRAINT c_str CHECK (STR<>'99')
        ,CONSTRAINT c_id_parent CHECK (ID<>PARENT_ID)
        ,CONSTRAINT pk_id_test2 PRIMARY KEY(ID) 
        ,CONSTRAINT fk_id_parent FOREIGN KEY(c_id_parent) REFERENCES SALESREPS (ID));

INSERT INTO TEST2  (ID , PARENT_ID, STR ) VALUES ('44', '55', rdr) CONSTRAINT ID  CHECK (STR<>'99') ;

1)
STR нет символов "99". не еквивалентно STR<>'99' , 'a99b' тож недопустимо
поетому nvl(instr(STR,'99'),0)=0 (или регуляркой)

2) инсертом проверяйте все ли ограничения Вы прописали, и наскоко правильно
напр строка с str='x99x' не должна вставлятся

3) ,CONSTRAINT fk_id_parent FOREIGN KEY(c_id_parent) REFERENCES SALESREPS (ID));
ето откуда

зи
SQL> CREATE TABLE TEST2 (
  2          ID NUMBER(3)
  3          ,PARENT_ID NUMBER
  4          ,STR VARCHAR2(100)
  5          ,CONSTRAINT c_str CHECK (nvl(instr(STR,'99'),0)=0)
  6          ,CONSTRAINT c_id_parent CHECK (ID<>PARENT_ID)
  7          ,CONSTRAINT pk_id_test2 PRIMARY KEY(ID)
  8          ,CONSTRAINT fk_id_parent FOREIGN KEY(parent_id) REFERENCES test2(ID))
  9  /

Table created.


.....
stax
28 ноя 14, 16:13    [16920566]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
stax..,

а зачем NVL в чеке?
28 ноя 14, 19:29    [16921677]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
stax..
Guest
andreymx
stax..,

а зачем NVL в чеке?

неверное был неправ (перемудрил) проверял на
  1* select * from dual where instr('','99')=0
SQL> /

no rows selected


.....
stax
28 ноя 14, 22:19    [16922300]     Ответить | Цитировать Сообщить модератору
 Re: Правильно ли я написал запрос?  [new]
moishamiem
Member

Откуда: ЧФ
Сообщений: 164
IShapovalov
23, да что то не хочется в армию


А зря, там не так уж плохо, можно на контракт остаться, платят хорошо и никакой джавы с ораклом знать не надо. Подумайте!
1 дек 14, 09:03    [16929392]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить