powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вернуть ROWID из хранимой процедуры
19 сообщений из 19, страница 1 из 1
Вернуть ROWID из хранимой процедуры
    #39391137
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичок в Oracle - помогите пожалуйста написать процедуру, которая возвращает ROWID новой записи.

Я пишу так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE PROCEDURE TP_EVENT_ADD(in_ProcessSourceId NUMBER, in_ProcessId NUMBER
    out_rowid OUT ROWID) 
IS
BEGIN

INSERT INTO TP_EVENT E
   (PROCESSSOURCEID, PROCESSID)
 VALUES
   (in_ProcessSourceId, in_ProcessId)
 RETURNING E.ROWID INTO out_rowid;
 
END TP_EVENT_ADD;
/



Она даже компилируется, но из .NET я никак не могу получить значение параметра out_rowid
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391140
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdron,

А что ты будешь делать в .NET делать с этим rowid?
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391145
Фотография Jebrail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так покажи что на .нет пишешь , а лучше сразу в форум .нет .
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391147
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

Он мне нужен, чтобы потом удалять эту запись по ROWID. Даже не спрашивайте почему нельзя использовать PK.
Архитекторы спроектировали таблицу где нет ни одного ключа - вообще. Предполагаются гигантские объемы - и нужна быстрая вставка значений туда. Поэтому ни индексов ни PK нет.

При этом в таблицу нужно вставлять записи, выбирать по одной, удалять...
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391152
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JebrailНу так покажи что на .нет пишешь , а лучше сразу в форум .нет .

С .NET, думаю, у меня нет проблем - чую проблема в Оракле - что-то я делаю не так... Но если интересно - то вот

Код: c#
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.
public new T Add(T entity)
        {
            var ret = entity;
            using (var cn = this.ConnectionProvider.GetConnection())
            {
                var cmd = cn.CreateCommand();
                cmd.CommandText = string.Concat(this.GetTableName(), "_ADD");
                cmd.CommandType = CommandType.StoredProcedure;
                this.SetAddParameters(cmd, entity);
                var rowid = cmd.Parameters.Add("out_rowid", OracleDbType.Varchar2, ParameterDirection.Output);

                cn.Open();

                var rdr = cmd.ExecuteNonQuery();

                if (rowid.Value == DBNull.Value)
                    return default(T);
                else
                {
                    ret.RowId = (string) rowid.Value;
                }
            }

            return ret;
        }



Я уже пробовал и ExecuteReader и ExecuteScalar...

Отвечает ошибкой "Oracle.ManagedDataAccess.Client.OracleException : ORA-06502: PL/SQL: ошибка числа или значения
ORA-06512: на "TP_EVENT_ADD", line 9
ORA-06512: на line 1"
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391159
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdronПредполагаются гигантские объемы - и нужна быстрая вставка значений туда.А построчная вставка - это действительно быстро?

balykovdronПри этом в таблицу нужно вставлять записи, выбирать по одной, удалять...Ну тогда и удалять надо быстро-быстро, пока rowid у записи не сменился.

И твой архитектор конечно же не опустился до того, чтобы не удосужился протестить производительность вставки в таблицу с PK из без такового.
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391168
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

Ребят, работаю с чем дали - помогите верно написать. Может как-то селектом его можно вернуть? Я не силен в Оракле - пока мне хотелось бы что-бы просто работало...
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391174
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdronнужно вставлять записи, выбирать по одной, удалять...Ну ладно еще, что обновлять не требуется. А по поводу удаления, в твоем варианте можно обойтись и без rowid:
Код: plsql
1.
 delete from TP_EVENT where rownum=1;
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391177
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
 delete from TP_EVENT where rownum=1;

[/quot]

Он удалит - первую попавшуюся. А мне нужно удалить запись с нужным ROWID. Но пока не про это речь - нужно получить ROWID новой...
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391182
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdronОн удалит - первую попавшуюся. А мне нужно удалить запись с нужным ROWID.В идеальном мире rowidов первая попавшаяся запись и есть нужная.
А в неидеальном - как, в отсутствие ключа, отличить одно от другого?
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391183
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdronОна даже компилируетсяКак же она у тебя компилится, если второй и третий параметр не разделены запятой?
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391185
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdronАрхитекторы спроектировали таблицу где нет ни одного ключа - вообще. Предполагаются гигантские объемы - и нужна быстрая вставка значений туда. Поэтому ни индексов ни PK нет.
И при этом вставка планируется через ХП, которую Вы тут показали - угадал? Тогда правильная последовательность действий такая:

а) уволить архитекторов за полнейшую некомпетентность и нежелание читать хотя бы базовую документацию
б) найти хотя бы одного специалиста, который что-то в этом смыслит
в) слушаться и делать как он говорит.
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391222
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько забавных ответов про смысл жизни и ни одного про
Код: plsql
1.
select ROWIDTOCHAR(CHARTOROWID('AAAFd1AAFAAAABSAA/')) from dual


хотя конечно штука опасная. Ибо IOT всякие и т.п.
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391227
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У чувака проблема - он не может открутить плоский болт крестовой отвёрткой. Давайте ему поможем, плевать, что рядом тихо плавится твэл в четвёртом энергоблоке
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391233
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну от рядом плавящегося ничего не спасет, ни PK, ни ROW_SCN ...
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391249
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
balykovdron

А попробуй-ка параметр создать так:
Код: c#
1.
var rowid = cmd.Parameters.Add(new OracleParameter("out_rowid", OracleDbType.Varchar2, ParameterDirection.Output) { Size = 100 });
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391407
pamibol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С .NET не работаю но для возврата ROWID обычно использую функцию


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE FUNCTION TP_EVENT_ADD(in_ProcessSourceId NUMBER, in_ProcessId NUMBER) 
RETURN VARCHAR2
IS
S VARCHAR2(100);
BEGIN

INSERT INTO TP_EVENT E
   (PROCESSSOURCEID, PROCESSID)
 VALUES
   (in_ProcessSourceId, in_ProcessId)
 RETURNING E.ROWID INTO S;
 
 RETURN(S);
 
END;
/
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391411
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamibolно для возврата ROWID обычно использую функциюВот! Это принципиально меняет дело!
...
Рейтинг: 0 / 0
Вернуть ROWID из хранимой процедуры
    #39391882
balykovdron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot pamibol]С .NET не работаю но для возврата ROWID обычно использую функцию
Спасибо тебе, добрый человек!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вернуть ROWID из хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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