powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первая процедура
15 сообщений из 15, страница 1 из 1
Первая процедура
    #39652628
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Пока разработчики перегружены, процедуры приходится пробовать писать самому.
Необходима была процедура для записи результата в лог-таблицу. Покурил интернеты, набросал
процедуру[SRC
PLSQL]CREATE OR REPLACE PACKAGE pkg_log IS
PROCEDURE p_log_write(SysId p_log.sysid%TYPE,
SysNum p_log.sysnum%TYPE,
Dtime p_log.dtime%TYPE,
icount p_log.icount%TYPE,
istate p_log.istate%TYPE,
icall p_log.icall%TYPE,
ddate p_log.idate%TYPE,
res p_log.result%TYPE) as
pragma autonomous_transaction;

begin
insert into p_log
(SysId, SysNum, Dtime, icount, istate, icall, ddate, res)
values
(SysId, SysNum, Dtime, icount, istate, icall, sysdate, res);
commit;
end p_log_write;
END pkg_log;[/SRC]

При компиляции валятся ошибки:
Error: PLS-00103: Encountered the symbol "PRAGMA" when expecting one of the following: language
Line: 10
Text: pragma autonomous_transaction;
и
ругается на последнюю строку пакета
Error: PLS-00103: Encountered the symbol "PKG_LOG" when expecting one of the following: ;
Line: 19
Text: END pkg_log;

В чем проблема? Руки не из того места?
...
Рейтинг: 0 / 0
Первая процедура
    #39652631
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz Руки не из того места?
Да.
В package размещают декларацию.
Реализация в package body.
...
Рейтинг: 0 / 0
Первая процедура
    #39652646
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz,

Не называйте переменные теми-же именами что и поля в таблице. Это потенциальный выстрел в ногу.
...
Рейтинг: 0 / 0
Первая процедура
    #39652651
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLНе называйте переменные теми-же именами что и поля в таблице. Это потенциальный выстрел в ногу.
Не потенциальный.
Вполне себе реальный и прицельный.
...
Рейтинг: 0 / 0
Первая процедура
    #39652671
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous , так лучше (не в плане одинаковости названий полей и переменных)?
?CREATE OR REPLACE PACKAGE pkg_log IS
PROCEDURE p_log_write(SysId p_log.sysid%TYPE,
SysNum p_log.sysnum%TYPE,
Dtime p_log.dtime%TYPE,
icount p_log.icount%TYPE,
istate p_log.istate%TYPE,
icall p_log.icall%TYPE,
ddate p_log.idate%TYPE,
res p_log.result%TYPE);
end pkg_log;

CREATE OR REPLACE PACKAGE BODY pkg_log IS
PROCEDURE p_log_write(SysId p_log.sysid%TYPE,
SysNum p_log.sysnum%TYPE,
Dtime p_log.dtime%TYPE,
icount p_log.icount%TYPE,
istate p_log.istate%TYPE,
icall p_log.icall%TYPE,
ddate p_log.idate%TYPE,
res p_log.result%TYPE) as
pragma autonomous_transaction;

begin
insert into p_log
(SysId, SysNum, Dtime, icount, istate, icall, ddate, res)
values
(SysId, SysNum, Dtime, icount, istate, icall, sysdate, res);
commit;
end p_log_write;
end pkg_log;
...
Рейтинг: 0 / 0
Первая процедура
    #39652678
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousприцельный.Не. Прицельный выстрел в тех, кто наивно полагается на незыблемость преикса П_, это вьюха dba_cube_dependencies.
...
Рейтинг: 0 / 0
Первая процедура
    #39652683
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2- , буду в курсе за префиес П. Но от этого легче не станет - таблица называется p_log, названа так давно и не мной
...
Рейтинг: 0 / 0
Первая процедура
    #39652684
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz -2- , буду в курсе за префиес П. Но от этого легче не станет - таблица называется p_log, названа так давно и не мной
Не то.
...
Рейтинг: 0 / 0
Первая процедура
    #39652691
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz,

параметры без p_
...
values
(PKG_LOG.SysId, PKG_LOG.SysNum, PKG_LOG.Dtime, PKG_LOG.icount, PKG_LOG.istate, PKG_LOG.icall, sysdate, PKG_LOG.res);
...

параметры c p_
...
values
(PKG_LOG.p_SysId, PKG_LOG.p_SysNum, PKG_LOG.p_Dtime, PKG_LOG.p_icount, PKG_LOG.p_istate, PKG_LOG.p_icall, sysdate, PKG_LOG.p_res);
...


.....
stax
...
Рейтинг: 0 / 0
Первая процедура
    #39652697
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
69.
70.
71.
72.
73.
74.
75.
76.
77.
> create table dropme_t(id number, val varchar2(100 char))

table DROPME_T created.

> create or replace procedure dropme_p_ins(id dropme_t.id%type, val dropme_t.val%type) as
begin
  insert into dropme_t(id, val) values (id, val);
end;

PROCEDURE DROPME_P_INS compiled

> exec dropme_p_ins(1,'ins1');dropme_p_ins(2,'ins2')
anonymous block completed

> select * from dropme_t
        ID VAL                                                                                                
---------- ----------------------------------------------------------------------------------------------------
         1 ins1                                                                                                 
         2 ins2                                                                                                 

-- So far so good, but...

> create or replace procedure dropme_p_upd(id dropme_t.id%type, val dropme_t.val%type) as
begin
  update dropme_t set val=val where id=id;
end;

PROCEDURE DROPME_P_UPD compiled


> exec dropme_p_upd(1,'upd')
anonymous block completed

> select * from dropme_t
        ID VAL                                                                                                
---------- ----------------------------------------------------------------------------------------------------
         1 ins1                                                                                                 
         2 ins2                                                                                                 

-- Казалось бы, ничего не произошло... как бы не так - ВСЕ строки заапдейтились сами на себя 
-- Проверку этого незамысловатого факта оставлю на самостоятельное изучение :)


--Solution1: prefixes
> create or replace procedure dropme_p_upd(i_id in dropme_t.id%type, i_val in dropme_t.val%type) as
begin
  update dropme_t set val=i_val where id=i_id;
end;

PROCEDURE DROPME_P_UPD compiled

> exec dropme_p_upd(1,'Sol1')
anonymous block completed

> select * from dropme_t
        ID VAL                                                                                                
---------- ----------------------------------------------------------------------------------------------------
         1 Sol1                                                                                                 
         2 ins2                                                                                                 

-- Solution2: явное разыменование переменной именем pl/sql блока
> create or replace procedure dropme_p_upd(id in dropme_t.id%type, val in dropme_t.val%type) as
begin
  update dropme_t set val=dropme_p_upd.val where id=dropme_p_upd.id;
end;

PROCEDURE DROPME_P_UPD compiled

> exec dropme_p_upd(2,'Sol2')

anonymous block completed

> select * from dropme_t
        ID VAL                                                                                                
---------- ----------------------------------------------------------------------------------------------------
         1 Sol1                                                                                                 
         2 Sol2                                                                                                 
...
Рейтинг: 0 / 0
Первая процедура
    #39652718
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous , мне надо через автономную транзакцию - текущий вариант логирования не работает. Причина простая - сначала идет запись в лог, после проверка на результат, который пришел из вне, если там не 0, то rollback и никакой записи в лог.
...
Рейтинг: 0 / 0
Первая процедура
    #39652721
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzz andrey_anonymous , мне надо через автономную транзакцию
И в чем сложность?
...
Рейтинг: 0 / 0
Первая процедура
    #39652771
GroMoZeKazzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous , сложность в том, что я не разработчик. Есть задача, хочу решить ее сам, курю интернеты и форумы и пытаюсь что-то запилить. Такое решение 21454632 тоже не взлетает.
...
Рейтинг: 0 / 0
Первая процедура
    #39652780
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GroMoZeKazzzТакое решение 21454632 тоже не взлетает.
А где прагма в декларации-то?
...
Рейтинг: 0 / 0
Первая процедура
    #39652798
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousGroMoZeKazzzТакое решение 21454632 тоже не взлетает.
А где прагма в декларации-то?
Блин, форматируте пожалуйста тегом SRC - нифига ж не видно...
И это... синтаксические ошибки можно и без форума выловить:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
...
PROCEDURE p_log_write(SysId p_log.sysid%TYPE,
...
res p_log.result%TYPE);
...
begin
insert into p_log
(SysId, SysNum, Dtime, icount, istate, icall, ddate, res) -- либо крестик снимите, либо трусы оденьте. Как поле в таблице называется?
values
(SysId, SysNum, Dtime, icount, istate, icall, sysdate, res);
...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Первая процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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