powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание процедуры(чисто инфа, не проблема)
21 сообщений из 21, страница 1 из 1
Создание процедуры(чисто инфа, не проблема)
    #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
Создание процедуры(чисто инфа, не проблема)
    #39464490
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

docs.oracle.com
...
Рейтинг: 0 / 0
Создание процедуры(чисто инфа, не проблема)
    #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
Создание процедуры(чисто инфа, не проблема)
    #39464753
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мегамозг,

Спасибо, именно это и нужно. Но уже успел сам найти это в гугл)
...
Рейтинг: 0 / 0
Создание процедуры(чисто инфа, не проблема)
    #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
Создание процедуры(чисто инфа, не проблема)
    #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
Создание процедуры(чисто инфа, не проблема)
    #39464791
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не особо понимаю, нужно ли каждый раз делать отдельный insert на ячейку. Хотел сократить код. Видимо, не получится.
...
Рейтинг: 0 / 0
Создание процедуры(чисто инфа, не проблема)
    #39464796
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опытным путем только что выяснил, что дело именно в названии данной ячейки. Можно ли как-то обойти это, не меняя названия столбцов в таблице?
...
Рейтинг: 0 / 0
Создание процедуры(чисто инфа, не проблема)
    #39464803
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

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

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

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


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

Да верно, но отношения к ней особо не имеет)))
Знакомы с фирмой?)
Сделал инсерт без all, спасибо. Но ошибку пока решил только rename'ом полей.
...
Рейтинг: 0 / 0
Создание процедуры(чисто инфа, не проблема)
    #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
Создание процедуры(чисто инфа, не проблема)
    #39464839
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

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

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

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


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