Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание процедуры(чисто инфа, не проблема) / 21 сообщений из 21, страница 1 из 1
02.06.2017, 10:48
    #39464362
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Доброе утро, друзья.
Вопрос такой. Нужно создать процедуру, этим никогда не занимался. Есть ряд вопросов, которые я с гуглом решить не смог.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create or replace procedure argus_temp.yl_problem_odin_in
( --p_start_date in to_date(to_char(sysdate,'dd.mm.yyyy'),'dd.mm.yyyy'),
  p_start_date in date,
  p_end_date in date,
  p_errcode out number,
  p_errtext out varchar2
) is
begin
  p_errcode := 0;
  delete from tab_1;
  case
    when p_start_date is null then p_errcode := 1;
      when p_end_date is null then p_errcode := 2;
      else p_errcode := 0;
      end case;
      case
        when p_errcode=1 then p_errtext := 'Заполните дату начала';
          when p_errcode=2 then p_errtext := 'Заполните дату окончания';
          else p_errtext := null;
            end case;
  end;


пока сделал только шапку с ошибками, но уже есть вопрос.
1-хотелось бы передавать просто дату без времени. Хватит ли для этого типа date, или нужно применять какие-то манипуляции.
2-сделал проверку на 0, но хочется знать, как сделать проверку на то, что дата в месяце отсутствует. Как код ORA-01839: для заданного месяца дата неверна.
3-можно ли как-то код ora, получаемый в п.2, сразу записать в текст ошибки.
Накидайте, пожалуйста, полезной инфы по такой тематике. Буду очень благодарен.
...
Рейтинг: 0 / 0
02.06.2017, 11:56
    #39464490
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector,

docs.oracle.com
...
Рейтинг: 0 / 0
02.06.2017, 14:45
    #39464717
мегамозг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector3-можно ли как-то код ora, получаемый в п.2, сразу записать в текст ошибки.

EXCEPTION
WHEN название_экспешна THEN ...
p_errcode := SQLCODE ;
p_errtext :=SQLERRM;
p_errtext := TO_CHAR(p_errcode) || ' ' || p_errtext;
--do smth
...
Рейтинг: 0 / 0
02.06.2017, 15:09
    #39464753
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
мегамозг,

Спасибо, именно это и нужно. Но уже успел сам найти это в гугл)
...
Рейтинг: 0 / 0
02.06.2017, 15:13
    #39464763
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
ReflectorДоброе утро, друзья.
Вопрос такой. Нужно создать процедуру, этим никогда не занимался. Есть ряд вопросов, которые я с гуглом решить не смог.

пока сделал только шапку с ошибками, но уже есть вопрос.
1-хотелось бы передавать просто дату без времени. Хватит ли для этого типа date, или нужно применять какие-то манипуляции.
2-сделал проверку на 0, но хочется знать, как сделать проверку на то, что дата в месяце отсутствует. Как код ORA-01839: для заданного месяца дата неверна.
3-можно ли как-то код ora, получаемый в п.2, сразу записать в текст ошибки.
Накидайте, пожалуйста, полезной инфы по такой тематике. Буду очень благодарен.
1) хватит (время не заполняете или усекайте), в оракля нет типа date, есть datetime
2) у Вас тип параметра date, врядли вы получите в коде ORA-01839
3) можно
Код: 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.
declare 
 v_err number;
 v_txt varchar2(512);
procedure yl_problem_odin_in
( --p_start_date in to_date(to_char(sysdate,'dd.mm.yyyy'),'dd.mm.yyyy'),
  p_start_date in date,
  p_end_date in date,
  p_errcode out number,
  p_errtext out varchar2
) is
  v_dat date;
begin
--  delete from tab_1;
  case
    when p_start_date is null then 
        p_errcode := 1;
        p_errtext := 'Заполните дату начала';
        return;
    when p_end_date is null then 
        p_errcode := 2;
        p_errtext := 'Заполните дату окончания';
        return;
      else 
        p_errcode := 0;
        p_errtext := null;
    end case;
    -- p_errcode:=1/0; --имитируем ошибку деленіе на 0; 
    v_dat:=to_date('05.30.2017','dd.mm.yyyy'); --имитеруем 1843
    --RAISE_APPLICATION_ERROR (-20001, '!!! сам генерю ошибку');
exception 
  when ZERO_DIVIDE then --для примера
        p_errcode := SQLCODE;
        p_errtext := 'Деление на 0';
  when others then
       p_errcode := SQLCODE;
       p_errtext := SQLERRM; --DBMS_UTILTY.FORMAT_ERROR_STACK
       --raise; если надо exception в вызывающую
end yl_problem_odin_in;
begin
 yl_problem_odin_in(null,sysdate,v_err,v_txt);
 dbms_output.put_line('ERR:'||v_err||' '||v_txt);
 yl_problem_odin_in(trunc(sysdate),trunc(sysdate),v_err,v_txt);
 dbms_output.put_line('ERR:'||v_err||' '||v_txt);
end;
/
SQL> /
ERR:1 Заполните дату начала
ERR:-1843 ORA-01843: not a valid month

PL/SQL procedure successfully completed.



.....
stax
...
Рейтинг: 0 / 0
02.06.2017, 15:25
    #39464785
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
stax..,

Спасибо большое, я более менее уже шарю благодаря всем)
По пункту 2, все верно, там TIMESTAMP(6) WITH LOCAL TIME ZONE. У себя тоже поменял.
Но сейчас возник второй вопрос
Код: plsql
1.
2.
3.
insert all
  into argus_temp.yl_problem_odin(subs_id,услуга на устройстве)
  values("SUBS_ID","Услуга на устройстве")


Идет ругань на то, что ожидает скобку в строке 2.

Error: PL/SQL: ORA-00907: отсутствует правая скобка
Line: 17
Text: into argus_temp.yl_problem_odin(subs_id,услуга на устройстве)
Хотя в таблице ячейка так и названа.
...
Рейтинг: 0 / 0
02.06.2017, 15:27
    #39464791
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Не особо понимаю, нужно ли каждый раз делать отдельный insert на ячейку. Хотел сократить код. Видимо, не получится.
...
Рейтинг: 0 / 0
02.06.2017, 15:29
    #39464796
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Опытным путем только что выяснил, что дело именно в названии данной ячейки. Можно ли как-то обойти это, не меняя названия столбцов в таблице?
...
Рейтинг: 0 / 0
02.06.2017, 15:33
    #39464803
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector,

Вот прям так и назывется 'услуга на устройстве' без кавычек, на русском и с пробелами?
...
Рейтинг: 0 / 0
02.06.2017, 15:45
    #39464820
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector,
покажите
desc argus_temp.yl_problem_odin

ps
імхо Вам all не надо

insert into таблица(поля через запятую) values (заначения через запятую);


зыы
argus от названия фирмы?
.....
stax
...
Рейтинг: 0 / 0
02.06.2017, 16:03
    #39464830
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
MaximaXXL,
К сожалению, уже переименовал( Но врать смысла нет, тем более это значение само тянется в PL/SQL Developer, если написать argus_temp.yl_problem_odin(all)
...
Рейтинг: 0 / 0
02.06.2017, 16:05
    #39464832
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
stax..,

Да верно, но отношения к ней особо не имеет)))
Знакомы с фирмой?)
Сделал инсерт без all, спасибо. Но ошибку пока решил только rename'ом полей.
...
Рейтинг: 0 / 0
02.06.2017, 16:13
    #39464838
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflectorstax..,

Да верно, но отношения к ней особо не имеет)))
Знакомы с фирмой?)
Сделал инсерт без all, спасибо. Но ошибку пока решил только rename'ом полей.
косвенное

если поле хитро называется, то надо имя задавать в двойных кавычках с учетом регистра
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> ed
Wrote file afiedt.buf

  1* create table yl_problem_odin(subs_id int,"Услуга на устройстве" varchar2(100))
SQL> /

Table created.

SQL> insert into yl_problem_odin(subs_id,"Услуга на устройстве") values (100,'Услуга на устройстве (тест)');

1 row created.

SQL> select * from yl_problem_odin;

   SUBS_ID
----------
Услуга на устройстве
--------------------------------------------------------------------------------
       100
Услуга на устройстве (тест)



.....
stax
...
Рейтинг: 0 / 0
02.06.2017, 16:14
    #39464839
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector,

попробывал бы вот так "услуга на устройстве"
...
Рейтинг: 0 / 0
02.06.2017, 18:51
    #39464956
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
stax..,
Спасибо, мне казалось, что такую вариацию я делал(перебирал одинарные кавычки точно).
Вот про передачу типа точно не делал, попробую на работе.) Спасибо большое!
...
Рейтинг: 0 / 0
02.06.2017, 18:53
    #39464958
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
stax..,
Блин, ерунду написал, не увидел, что селект первый. Просто данное значение подтягивается автоматически при выставлении '('
после схема.имя_таблицы
Вот и подумал, что ограничивать его и преобразовывать не надо.
...
Рейтинг: 0 / 0
02.06.2017, 19:13
    #39464969
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Если в программировании столько бездарей, что же делается с другими профессиями... грядет череда техногенных катастроф.
...
Рейтинг: 0 / 0
02.06.2017, 21:20
    #39465009
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
-2-,
Я думаю, что учиться человеку никогда не поздно. А осуждать его за это по крайней мере,не корректно) Но каждый имеет свое мнение.
...
Рейтинг: 0 / 0
02.06.2017, 21:35
    #39465013
K790
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflector,

Вам хотят донести, что прежде чем идти с вопросами на форум, нужно хотя бы ознакомиться с основами. Примеров куча, что Вам мешает их изучить?

А Станиславу уже нужно прекращать кормить около-решениями подобных.
...
Рейтинг: 0 / 0
03.06.2017, 00:48
    #39465062
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
K790,
Как вы могли видеть вначале, я и просил примеры инфы, так как сам не нашел. Но находятся люди, которые готовы помочь, спасибо им.
Не очень понимаю, что плохо в том, что человек, поискав инфу, задаст вопрос, если не нашел нужного ответа. Я не прошу сделать за меня, прошу лишь сказать, что можно почитать, дабы расширить свои знания.
Имхо, бессмысленный разговор.
...
Рейтинг: 0 / 0
03.06.2017, 07:44
    #39465078
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание процедуры(чисто инфа, не проблема)
Reflectorчто можно почитать, дабы расширить свои знания.RTFM Oracle Database Online Documentation / Application Development (FAQ) : PL/SQL Language Reference
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание процедуры(чисто инфа, не проблема) / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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