|
update blob in trigger
|
|||
---|---|---|---|
#18+
Всем привет! есть триггер(after update for each row), в котором на изменение строчки делается инсерт новой строки в протокольную таблицу (аля fgaс своими силами) выполняемый участок кода Код: plaintext 1. 2.
соответственно в самой программе добавляется в таблицу строка, потом в эту строку вставляется (через odbc) blob (т.е. делается update, который вызывает срабатывание написанного выше кода) по непонятными причинам во время update в переменной :new.blob ничего нет (dbms_lob.getlength = 0), в результате в протокольную таблицу сваливается строка с пустым лобом если же после этого из клиента сделать update той же строки (например, update .. set field1=field1 where .. т.е. который реально ничего не изменяет, то сработавший триггер помещает в протокольную таблицу нормальный блоб, причем работает тот же самый участок кода может кто-нибудь подскажет, это баг оракла или я что-то не так делаю (не хочется делать лишний update)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 12:55 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
если не ошибаюсь, то для добавления строки с blob нужно сначала добавить строку с empty_blob, а потом сделать update ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 13:16 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
//вот пример из документации... 9.2.0 Example 1: Inserting a Word document into a BLOB Column using PL/SQL The following code (steps 2-5) inserts MyResume.doc in the resume column of sam_emp table. Create a directory object in Oracle. Here is how to create a directory object called MY_FILES which represents C:\MY_DATA directory. You must have CREATE DIRECTORY privilege in Oracle. create or replace directory MY_FILES as 'C:\MY_DATA'; Insert a row with empty BLOB in your table and return the locator. Point to the Word file to be loaded from the directory created in Step 1, using the BFILE data type. Open the file and use the locator from step 2 to insert the file. Close the file and commit the transaction. declare f_lob bfile; b_lob blob; begin insert into sam_emp(empno,ename,resume) values ( 9001, 'Samir',empty_blob() ) return documents into b_lob; f_lob := bfilename( 'MY_FILES', 'MyResume.doc' ); dbms_lob.fileopen(f_lob, dbms_lob.file_readonly); dbms_lob.loadfromfile ( b_lob, f_lob, dbms_lob.getlength(f_lob) ); dbms_lob.fileclose(f_lob); commit; end; / ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 13:23 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
мне кажется что вся проблема в том, что у меня при срабатывании триггера dbms_lob.getlength(:new.content_blob) = 0 т.е. нет там ничего, а на самом деле данные есть, так как после коммит я могу их считать попробовал с еmpty_lob() ничего не поменялось ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 13:29 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
Попробуй сделать to_blob(:new.CONTENT_BLOB) -------------------------------- Автор благодарит алфавит за любезно предоставленные ему буквы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 13:37 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
to_blob не помогает при компиляции пишет ошибку Error: PL/SQL: ORA-00932: inconsistent datatypes: expected BINARY got BLOB ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 13:58 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
из документации... For a table on which you have defined a DML trigger, if you use OCI functions or DBMS_LOB routines to change the value of a LOB column or the LOB attribute of an object type column, Oracle does not fire the DML trigger. а также... Trigger Restrictions on LONG and LONG RAW Datatypes LONG and LONG RAW datatypes in triggers are subject to the following restrictions: A SQL statement within a trigger can insert data into a column of LONG or LONG RAW datatype. If data from a LONG or LONG RAW column can be converted to a constrained datatype (such as CHAR and VARCHAR2), then a LONG or LONG RAW column can be referenced in a SQL statement within a trigger. The maximum length for these datatypes is 32000 bytes. Variables cannot be declared using the LONG or LONG RAW datatypes. :NEW and :PARENT cannot be used with LONG or LONG RAW columns. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 14:02 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
но триггер то срабатывает!!! в качестве клиента юзается акцес и используется методом adodb.recordset.AppendChunk а потом adodb.recordset.update видно действительно придется делать лишний update спасибо за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 14:19 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
2 Simon если есть рк в after уровня оператора перечитать и записать в аудит не пробовали, должно работать ЗЫ можно по rowid попытаться перечитать блоб, правда сам не пробовал ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 15:44 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
Simonto_blob не помогает при компиляции пишет ошибку Error: PL/SQL: ORA-00932: inconsistent datatypes: expected BINARY got BLOB Так у тя clob или blob? Ну тогда to_clob(). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 16:06 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
Apex Simonto_blob не помогает при компиляции пишет ошибку Error: PL/SQL: ORA-00932: inconsistent datatypes: expected BINARY got BLOB Так у тя clob или blob? Ну тогда to_clob(). Сорри, невнимателно прочел вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2005, 16:10 |
|
update blob in trigger
|
|||
---|---|---|---|
#18+
столкнулся с похожей проблемой: в среде разроботки Toad for Oracle, пытаюсь обновить поле с типом BLOB. есть триггер, который потом переливает это поле в другую таблицу. если выполнить апдейт через statement (update my_table set blob_field = ...), то в триггере длина нового блоба ненулевая (dbms_lob.getlength(:new.blob_field) > 0), но если изменяю тело BLOBa через data grid (двойной клик по полю в строке, затем открывается "Blob editor", затем выбираю любой файл непустой и загружаю, то в том же триггере почему-то dbms_lob.getlength = 0, но из таблицы могу скачать блобик и там есть открываемое непустое содержимое) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 14:39 |
|
|
start [/forum/topic.php?fid=52&fpage=85&tid=1882829]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 189ms |
0 / 0 |