powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура в оракле
27 сообщений из 27, показаны все 2 страниц
Процедура в оракле
    #39490353
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Давно не работал с ораклом забыл напрочь синтаксис.

суть задачи в следующем есть процедура

create or replace procedure v_lead_update_test
(param int, DelDay int)
is
trecingid number;
BEGIN

select max("TrackingRecordID") into trecingid
from gpapp."TrackingRecord"
where "Stamp"<to_date(cast(sysdate-2 as char(10)));

if trecingid>0 then
insert into DFK.V_LEAD_UPD_TEST
(TrackingRecordID, LeadID, Stamp, Inserted )
select nvl(trecingid,100), 0, SYSDATE, SYSDATE FROM DUAL;
else
insert into DFK.V_LEAD_UPD_TEST
(TrackingRecordID, LeadID, Stamp, Inserted )
select 0, 0, SYSDATE, SYSDATE FROM DUAL;
end if;
COMMIT;
END;

Так вот если убрать селект с присвоением переменной то все работает, а с ним инсерт не происходит
Какие будут варианты с переменной чтоб и присваивало и инсерт выполнялся?
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490362
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyПроцедура в оракле

Давно не работал с ораклом забыл напрочь синтаксис.Лучше спросить в форуме по ораклу.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490397
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyс ним инсерт не происходит Ошибка какая?
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490464
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady
Код: plsql
1.
to_date(cast(sysdate-2 as char(10)))

Говнокодец.
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490521
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490573
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyДобрый день!

Давно не работал с ораклом забыл напрочь синтаксис.
соглашение об именах
На одной из страниц вашего корпоративного положения об именовании
объектов в программных модулях написано:

2.1.1 V_... - имена с данным префиксом зарезервированы для представлений(view)
2.1.2 P_... - имена с данным префиксом зарезервированы для параметров функций, процедур ...
2.1.3 L_... - имена с данным префиксом зарезервированы для переменных в блоке кода ...

...
2.2.7 При создании и обращении к таблице, к её колонкам, не использовать двойные кавычки.
Иначе код становится регистрозависимым!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
create or replace procedure testleadupdate_p
--v_lead_update_test имя с данным префиксом зарезервировано для вью
--выкинем эти неиспользуемые, неправильно именованные аргументы (param int, DelDay int)
 is 
 --ошибка в типе? ошибка в имени?
 --trecingid number;
 --
 l_trecingid gpapp.TrackingRecord.TrackingRecordID%type;

 BEGIN 
 --п.2.2.7
 --select max("TrackingRecordID") into trecingid
 -- from gpapp."TrackingRecord" 
 -- where "Stamp"<to_date(cast(sysdate-2 as char(10)));

 --с какой целью ищется max(TrackingRecordID)?
 --надеюсь, не для вставки  вместо последовательности(sequance)
 --
 select max(TrackingRecordID) into l_trecingid
  from gpapp.TrackingRecord
   where Stamp <  sysdate-2;

  --где-то здесь зарыта логика и лишний код
  --
--if trecingid>0 then 
-- insert into DFK.V_LEAD_UPD_TEST
-- (TrackingRecordID, LeadID, Stamp, Inserted )
-- select nvl(trecingid,100), 0, SYSDATE, SYSDATE FROM DUAL;
-- else 
-- insert into DFK.V_LEAD_UPD_TEST
-- (TrackingRecordID, LeadID, Stamp, Inserted )
-- select 0, 0, SYSDATE, SYSDATE FROM DUAL;
-- end if;

 -- п.2.3.1 выбросить коммит из данной процедуры
 -- COMMIT;
END;
/
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490581
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

судя по этой корявенькой формулировке
Код: plsql
1.
to_date(cast(sysdate-2 as char(10)))


Я думаю что kolyady хотел написать
Код: plsql
1.
trunc(sysdate)-2




смущает nvl для переменной больше нуля ... т.е. она не может быть null и попасть в эту часть if-a
Код: plsql
1.
2.
3.
4.
if trecingid>0 then 
insert into DFK.V_LEAD_UPD_TEST
(TrackingRecordID, LeadID, Stamp, Inserted )
select nvl(trecingid,100), 0, SYSDATE, SYSDATE FROM DUAL;
...
Рейтинг: 0 / 0
Процедура в оракле
    #39490596
Whiplashock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Говнокод на говнокоде говнокодом погоняет.
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494545
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо конечно за детальный разбор кода, ваши замечания обоснованы. Но все же обращаю внимание на то что суть вопроса была не в том чтобы проанализировать корректность написания кода. А в том как в процедуре присвоить переменной результат подселекта , и чтобы потом выпролнялся инсерт с использованием значения которое записалось в переменную.
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494583
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady, мало того, что мы вынуждены разбирать твой неотформатированный говнокод, так ты еще и ленишься написать, что за ошибка.
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494584
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadyСпасибо конечно за детальный разбор кода, ваши замечания обоснованы. Но все же обращаю внимание на то что суть вопроса была не в том чтобы проанализировать корректность написания кода. А в том как в процедуре присвоить переменной результат подселекта , и чтобы потом выпролнялся инсерт с использованием значения которое записалось в переменную.
повторно
если инсерт проходит, то уберите двойные кавычки, в оракле ето важно

у Вас может селект слетать из-за неявного преобразования to_date(cast(sysdate-2 as char(10)))

select * from dual where sysdate>=to_date(cast(sysdate-2 as char(10))) у Вас не слетает?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select * from dual where sysdate>=to_date(cast(sysdate-2 as char(10)));
select * from dual where sysdate>=to_date(cast(sysdate-2 as char(10)))
                                                      *
ERROR at line 1:
ORA-25137: Data value out of range

SQL>




......
stax
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494595
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady, и вообще, разжую тебе кашку и положу в ротик. Милый мой пупсик.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
create table tst_table(xz number, xz_date date);

create or replace procedure govnocode
as
  l_num  number;
  i      number := 0;
begin  
  while i < 11 loop
  
    select mod(trunc(dbms_random.value*10), 2)
    into l_num
    from dual;
    
    if l_num > 0 then
      insert into tst_table(xz    , xz_date)
      values               (l_num , sysdate);
    else 
      insert into tst_table(xz    , xz_date)
      values               (l_num , sysdate);
    end if;
    
   i := i + 1;
  
  end loop;
  
  commit;
  
end;
/

exec govnocode;
select * from tst_table;

drop table tst_table purge;
drop procedure govnocode;
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494620
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
Спасибо мамуля :)
Ток мне непонятно зачем тут цикл, и еще одна безпонтовая переменная (i number := 0;)
Есть вариант без костылей чтоб работало и без циклов если можно
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494623
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
По поводу кавичек, БЕЗ НИХ НЕ РАБОТАЕТ. Безпонятия как создавались они (наверное с кавичками), но если их не ставить пишет такой таблици не существует. Есть подозрение что среда не совсем подходящая (работаю в SQL Developere)
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494626
stax....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..kolyady, и вообще, разжую тебе кашку и положу в ротик. Милый мой пупсик.



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

так
автор
Код: plsql
1.
2.
3.
  select mod(trunc(dbms_random.value*10), 2)
    into l_num
    from dual;



(как Вы расжевали) луче не присваивавать




проблема вероятно в "TrackingRecordID" и TrackingRecordID

зи
серых клонов не победить

ех, придется постить с тремя точками

......
stax
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494631
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

А вот за транк реально спасибо :), поменял и начало инсертить .
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494633
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady,

Всем сапасибо тему можно считать закрытой!
Ура товарищи .... Ура!
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494635
stax....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kolyady, зря радуешься, неуч. Если у тебя такого уровня проблемы, то тебе лучше вообще завязывать. Ведь у тебя при ошибке возникает не желание полезть в гугл, документацию, мозг, а пойти поплакаться на форуме.

И то что я помог, я это делаю лишь потому, что люблю хвататься за все что угодно. Чаще всего не разбираясь в контексте вообще.




......
stax
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494640
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax....,
Напоминаеш Доктора Хауса, типа помогу но попутно говенцом полью чисто чтоб поржать, рад за тя что ты много знаеш - я немного, пытаюсь узнать больше, хочеш и можеш помогай, не хочеш не помогай. Какие проблемы то?
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494641
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadystax..,
По поводу кавичек, БЕЗ НИХ НЕ РАБОТАЕТ. Безпонятия как создавались они (наверное с кавичками), но если их не ставить пишет такой таблици не существует. Есть подозрение что среда не совсем подходящая (работаю в SQL Developere)
проверить как создана таблица (регистро зависимое имя) самое простое
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select table_name from all_tables where table_name='Test';

TABLE_NAME
------------------------------
Test

SQL>



для поля смотрите структуру таблички
desc gpapp."TrackingRecord"

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

если имена не на верхнем регистре, то кавычки нужны
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
SQL> create table Test(id int,n varchar2(20));

Table created.

SQL> select * from Test;

no rows selected

SQL> select * from "Test";
select * from "Test"
              *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> create table "Test"(id int,"n" varchar2(20));

Table created.

SQL> select * from "Test";

no rows selected

SQL> select id,n from "Test";
select id,n from "Test"
          *
ERROR at line 1:
ORA-00904: "N": invalid identifier


SQL> select id,"n" from "Test";

no rows selected

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 N                                                  VARCHAR2(20)

SQL> desc "Test";
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 n                                                  VARCHAR2(20)


SQL> insert into Test values(1,'Stax');

1 row created.

SQL> insert into "Test" values(1,'Stanislav');

1 row created.

SQL> select * from Test;

        ID N
---------- --------------------
         1 Stax

SQL> select * from "Test";

        ID n
---------- --------------------
         1 Stanislav

SQL>
SQL>
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494646
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
Тобиш хочеш сказать что если в имени таблички присутствуют буквы нижнего регистра то обращатся к ней ток через кавычки нужно, Я так понимаю что и колонки тоже должны быть в верхнем (так как без кавычек тоже не видит)?
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494651
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
А зачем такой геморой в оракле, на ms sql ,без таких гемороев и вроде каки хто проблем не возникает. Или это настраивается в оракле??? Можно убрать какими то настройками оракла чтобы можно было нормально обращаться к табличке вне зависимости от регистра?
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494655
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadystax..,
Тобиш хочеш сказать что если в имени таблички присутствуют буквы нижнего регистра то обращатся к ней ток через кавычки нужно, Я так понимаю что и колонки тоже должны быть в верхнем (так как без кавычек тоже не видит)?
да

без кавычек имя неявно будет приведено в верхний регистр

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SQL> create table їжачок(голка int);

Table created.

SQL> desc їжачок;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ГОЛКА                                              NUMBER(38)

SQL> select * from all_tables where table_name='їжачок';

no rows selected

SQL> select table_name from all_tables where table_name=upper('їжачок');

TABLE_NAME
------------------------------
ЇЖАЧОК

SQL> select * from їжачок;

no rows selected

SQL> select * from "їжачок";
select * from "їжачок"
              *
ERROR at line 1:
ORA-00942: table or view does not exist


.....
stax
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494658
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyadystax..,
А зачем такой геморой в оракле, на ms sql ,без таких гемороев и вроде каки хто проблем не возникает. Или это настраивается в оракле??? Можно убрать какими то настройками оракла чтобы можно было нормально обращаться к табличке вне зависимости от регистра?

в древних версиях такого не было
расширили возможности
фіча, не хочешь, не пользуй "

....
stax
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494660
kolyady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,
Ясно спасиб :)
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494663
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Процедура в оракле
    #39494666
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolyady..А зачем такой геморой в оракле..
а затем, чтобы жизнь мёдом не казалась тем хитрожопым креатурам, которые страдают от любых рамок
(например - не хотят придерживаться соглашения oracle naming rules а-ля версии <= oracle 7)
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура в оракле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]