Synching index with a trigger

Hi all,
I have the following trigger setup:
CREATE OR REPLACE TRIGGER update_file_content
AFTER INSERT OR UPDATE OR DELETE ON test_files
BEGIN
if deleting then
ctx_ddl.optimize_index('file_content_idx','FULL');
else
ctx_ddl.sync_index('file_content_idx');
end if;
END;
Problem is that whenever I insert/update/delete something in the table I get the following errors:
17:47:04 Error: ORA-20000: Oracle Text error:
DRG-51300: error getting dml Queue lock
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.CTX_DDL", line 539
ORA-06512: at "UPDATE_FILE_CONTENT", line 5
ORA-04088: error during execution of trigger 'UPDATE_FILE_CONTENT'
Those comments alone work perfect. So, actually how can I synch my index to be uptodate all the time?
Nitai

I left out a couple of single quotes. Please see the corrected code in the demo below.
scott@ORA92> CREATE TABLE test_files
  2    (test_col VARCHAR2(60))
  3  /
Table created.
scott@ORA92> CREATE INDEX file_content_idx
  2  ON test_files (test_col)
  3  INDEXTYPE IS CTXSYS.CONTEXT
  4  /
Index created.
scott@ORA92> CREATE OR REPLACE TRIGGER update_file_content
  2    AFTER INSERT OR UPDATE OR DELETE ON test_files
  3  DECLARE
  4    v_job NUMBER;
  5  BEGIN
  6    if deleting then
  7        DBMS_JOB.SUBMIT
  8          (v_job, 'ctx_ddl.optimize_index(''file_content_idx'',''FULL'');', SYSDATE);
  9    else
10        DBMS_JOB.SUBMIT
11          (v_job, 'ctx_ddl.sync_index(''file_content_idx'');', SYSDATE);
12    end if;
13  END;
14  /
Trigger created.
scott@ORA92> SHOW ERRORS
No errors.
scott@ORA92> INSERT INTO test_files (test_col)
  2  VALUES ('first inserted test record')
  3  /
1 row created.
scott@ORA92> COMMIT
  2  /
Commit complete.
scott@ORA92> EXEC DBMS_LOCK.SLEEP (15)
PL/SQL procedure successfully completed.
scott@ORA92> SELECT token_text FROM dr$file_content_idx$i
  2  /
TOKEN_TEXT
FIRST
INSERTED
RECORD
TEST
scott@ORA92> SELECT * FROM test_files
  2  WHERE  CONTAINS (test_col, 'first') > 0
  3  /
TEST_COL
first inserted test record
scott@ORA92>

Similar Messages

  • Error when creating index with parallel option on very large table

    I am getting a
    "7:15:52 AM ORA-00600: internal error code, arguments: [kxfqupp_bad_cvl], [7940], [6], [0], [], [], [], []"
    error when creating an index with parallel option. Which is strange because this has not been a problem until now. We just hit 60 million rows in a 45 column table, and I wonder if we've hit a bug.
    Version 10.2.0.4
    O/S Linux
    As a test I removed the parallel option and several of the indexes were created with no problem, but many still threw the same error... Strange. Do I need a patch update of some kind?

    This is most certainly a bug.
    From metalink it looks like bug 4695511 - fixed in 10.2.0.4.1

  • Can we associate index with foreign key?

    hello
    i have searched and could not find the answer to the above;
    i have a foreign key constraint on the tables; i added an index on that column as well;
    however when i query the all_constraints, under index_name for this foreign constraint there is nothing; only when i have PK/UK i case see indexes associated with them;
    will then oracle still associate my index with the FK constrained column? or i need to excplicity associate it with the foreign key column? if so, how to do that?
    thx
    rgds

    Hi,
    UserMB wrote:
    i have a foreign key constraint on the tables; i added an index on that column as well;It helps if you give a specific example, such as:
    "I have a foreign key constraint, where emp.deptno references dept.deptno. (Deptno is the primary key of dept.) I created an index called emp_deptno_idx on emp.deptno as well."
    however when i query the all_constraints, under index_name for this foreign constraint there is nothing; only when i have PK/UK i case see indexes associated with them;Not all indexes are associated with a constraint. In the example above, you wouldn't expect to see anything about the index emp_demptno_idx in all_constraints or in all_cons_columns.
    will then oracle still associate my index with the FK constrained column? or i need to excplicity associate it with the foreign key column? if so, how to do that?In the situation above, Oracle will still use the index when the optimizer thinks it will help. You don't have to do anything else.

  • Problem generating index with 2th level in cs4

    Windows XP sp 3 - Indesign CS4 601
    When generating an index with a 1st and a 2th level, in the 2th level the entry of the 1st entry is always repeated.
    E.g. the index should look as this:
    text     75
         capitalized     76
         import     78
    word     105
         language     108
         meaning     109
    But actually the index looks as this:   
    text     75
         textcapitalized     76
         textimport     78
    word     105
         wordlanguage     108
         wordmeaning     109
    Is this a bug, or is there a solution for it?
    Thanks for your help!
    Luc Van de Cruys
    phaedra creative communications

    Oops!
    Just tested the script.
    I run it, and I get the script alert 'All Done' at the end.
    But nothing happens.
    This is what I do:
    - I generate the index.
    - I select the index with the text tool (select all or just put the textcursor somewhere in the index makes no difference).
    - I run the script
    - I get the message 'all done', but there is no difference. The problem persists.
    Any other ideas?
    Thanks anyway.
    L.L.

  • Performance - composite index with 'OR' in 'WHERE' clause

    I have a problem with the performance of the following query:
    select /*+ index_asc(omschact oma_index1) */ knr, projnr, actnr from omschact where ((knr = 100 and actnr > 30) or knr > 100)
    and rownum = 1;
    (rownum used only for test purpose)
    index:
    create index on omschact (knr, projnr);
    Execution plan:
    Id Operation
    0 SELECT STATEMENT
    1 COUNT STOPKEY
    2 TABLE ACCESS BY INDEX ROWID
    3 INDEX FULL SCAN
    If I'm correct, the 'OR' in the 'WHERE' clause is responsible for the INDEX FULL SCAN, what makes the query slow.
    A solution would be then to separate the 'WHERE' clause in 2 separate select's (1 with 'knr = 100 and actnr > 30' and 1 with 'knr > 100' and combine the results with a UNION ALL.
    Since it's necessary to have all rows in ascending order (oma_index1) I still have to use an ORDER BY to make sure the order of the rows is correct. This results again in a (too) low performance.
    Another solution that does the trick is to create an index with the 2 fields (knr, projnr) concatenated and to use the same in the 'WHERE' clause:
    create index oma_index2 on omschact (knr || projnr);
    select /*+ index_asc(omschact oma_index2) */ knr, projnr, actnr from omschact where (knr || projnr) > 10030;
    I just can't believe this work-around is the only solution, so I was hoping that someone here knows of a better way to solve this.

    padders,
    I'll give the real data instead of the example. The index I really use consists of 4 fields. In this table the fields are just numbers, but in other tables I need to use char-fields in indexes, so that's why I concatenate instead of using formula's (allthough I would prefer the latter).
    SQL> desc omschact
    Name Null? Type
    KNR NOT NULL NUMBER(8)
    PROJNR NOT NULL NUMBER(8)
    ACTNR NOT NULL NUMBER(8)
    REGELNR NOT NULL NUMBER(3)
    REGEL CHAR(60)
    first methode:
    SQL> create index oma_key_001(knr,projnr,actnr,regelnr);
    Index created.
    SQL> select /*+ index_asc(omschact oma_key_001) */ * from omschact where
    2 (knr > 100 or
    3 (knr = 100 and projnr > 30) or
    4 (knr = 100 and projnr = 30 and actnr > 100000) or
    5 (knr = 100 and projnr = 30 and actnr = 100000 and regelnr >= 0));
    Execution Plan
    Plan hash value: 1117430516
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 11M| 822M| 192K (1)| 00:38:26 |
    | 1 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 11M| 822M| 192K (1)| 00:38:26 |
    |* 2 | INDEX FULL SCAN | OMA_KEY_001 | 11M| | 34030 (1)| 00:06:49 |
    Predicate Information (identified by operation id):
    2 - filter("KNR">100 OR "KNR"=100 AND "PROJNR">30 OR "KNR"=100 AND "PROJNR"=30
    AND "ACTNR">100000 OR "ACTNR"=100000 AND "KNR"=100 AND "PROJNR"=30 AND
    "REGELNR">=0)
    second method (same index):
    SQL> select * from (
    2 select /*+ index_asc(omschact oma_key_001) */ * from omschact where knr > 100
    3 union all
    4 select /*+ index_asc(omschact oma_key_001) */ * from omschact where knr = 100 and projnr > 30
    5 union all
    6 select /*+ index_asc(omschact oma_key_001) */ * from omschact where knr = 100 and projnr = 30 and actnr > 100000
    7 union all
    8 select /*+ index_asc(omschact oma_key_001) */ * from omschact where knr = 100 and projnr = 30 and actnr = 100000 and regelnr > 0)
    9 order by knr, projnr, actnr, regelnr;
    Execution Plan
    Plan hash value: 292918786
    | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 11M| 1203M| | 477K (1)| 01:35:31 |
    | 1 | SORT ORDER BY | | 11M| 1203M| 2745M| 477K (1)| 01:35:31 |
    | 2 | VIEW | | 11M| 1203M| | 192K (1)| 00:38:29 |
    | 3 | UNION-ALL | | | | | | |
    | 4 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 11M| 822M| | 192K (1)| 00:38:26 |
    |* 5 | INDEX RANGE SCAN | OMA_KEY_001 | 11M| | | 33966 (1)| 00:06:48 |
    | 6 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 16705 | 1272K| | 294 (1)| 00:00:04 |
    |* 7 | INDEX RANGE SCAN | OMA_KEY_001 | 16705 | | | 54 (0)| 00:00:01 |
    | 8 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 47 | 3666 | | 4 (0)| 00:00:01 |
    |* 9 | INDEX RANGE SCAN | OMA_KEY_001 | 47 | | | 3 (0)| 00:00:01 |
    | 10 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 1 | 78 | | 4 (0)| 00:00:01 |
    |* 11 | INDEX RANGE SCAN | OMA_KEY_001 | 1 | | | 3 (0)| 00:00:01 |
    Predicate Information (identified by operation id):
    5 - access("KNR">100)
    7 - access("KNR"=100 AND "PROJNR">30)
    9 - access("KNR"=100 AND "PROJNR"=30 AND "ACTNR">100000)
    11 - access("KNR"=100 AND "PROJNR"=30 AND "ACTNR"=100000 AND "REGELNR">0)
    third method:
    SQL> create index oma_test(to_char(knr,'00000000')||to_char(projnr,'00000000')||to_char(actnr,'00000000')||to_char(regelnr,'000'));
    Index created.
    SQL> select /*+ index_asc(omschact oma_test) */ * from omschact where
    2 (to_char(knr,'00000000')||to_char(projnr,'00000000')||
    3 to_char(actnr,'00000000')||to_char(regelnr,'000')) >=
    4 (to_char(100,'00000000')||to_char(30,'00000000')||
    5* to_char(100000,'00000000')||to_char(0,'000'))
    Execution Plan
    Plan hash value: 424961364
    | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
    | 0 | SELECT STATEMENT | | 553K| 55M| 1712 (1)| 00:00:21 |
    | 1 | TABLE ACCESS BY INDEX ROWID| OMSCHACT | 553K| 55M| 1712 (1)| 00:00:21 |
    |* 2 | INDEX RANGE SCAN | OMA_TEST | 99543 | | 605 (1)| 00:00:08 |
    Predicate Information (identified by operation id):
    2 - access(TO_CHAR("KNR",'00000000')||TO_CHAR("PROJNR",'00000000')||TO_CHAR("
    ACTNR",'00000000')||TO_CHAR("REGELNR",'000')>=TO_CHAR(100,'00000000')||TO_CHAR(3
    0,'00000000')||TO_CHAR(100000,'00000000')||TO_CHAR(0,'000'))

  • Hi how do i delete voice memos from my iPhone 4 after I have synched them with iTunes?

    Hi how do i delete voice memos from my iPhone 4 after I have synched them with iTunes?

    Hi James thanks so much for your reply
    What I was trying to do though was to mass delete the voice memos from the phone, and I was told that one can do that via iTunes. Problem is that when I do open iTunes, I am not able to locate a TAB thats says ON THIS IPHONE
    I was told that one could click on this and then select multiple Voice Memos and delete this way.
    Thanks again for your assistance

  • I have itunes set up on a PC with all my music, apps, etc. I want to stop using PC and move my iTunes and files to a Mac I bought and synch my iPhone with the Mac. Can I just synch iPhone with Mac iTunes and will it copy all my stuff onto Mac, or will I h

    I have itunes set up on a PC with all my music, apps, etc. I want to stop using PC and move my iTunes and files to a Mac I bought and synch my iPhone with the Mac. Can I just synch iPhone with Mac iTunes and will it copy all my stuff onto Mac, or will I have to copy files from PC onto Mac?

    Here are some of the links to get you started.
    https://discussions.apple.com/thread/3727530?start=0&tstart=0
    http://support.apple.com/kb/HT4527
    http://www.macworld.com/article/1146958/move_itunes_windows_mac.html

  • Why does it tell me my ipad is synched with another itunes library and wants to erase the thing when I want to synch it?  I haven't synched it with any other mac but my own.

    why does it tell me my ipad is synched with another itunes library and wants to erase the thing when I want to synch it?  I haven't synched it with any other mac but my own.

    Hi Lisa,
    I know from experience that this must be a frustrating situation for you especially if you don't want to loose the music/video content that is currently on your ipod. Unfortunately though you may have to consider re-syncing it as it thinks its currently synced with another computer.
    If you bought any music that is on the ipod through itunes you can opt to right click the ipod in itunes and 'transfer purchases' if you authorise your library in the 'Store' menu in itunes. Some reasons for this happening may include some of the following:
    Deleting and reinstalling your itunes on the computer.
    Removing the account you had on the computer you used itunes in and making a new one. (User account, eg: Lisa).
    Changing computers in the past.
    A friend or family member syncing it on their computer to give you there music.
    A sign of a failing iPod.
    Alternatively you can opt to not sync it and keep the music that is on your ipod there but this means you will never be able to update your ipod.
    Hope this helps!

  • Itunes doesn't seem to synch "wirelessly" with my iphone.  It seems to work with emails but not photos / videos I've taken on my phone.  Also, there is no "device" listed on itunes menu bar, only when connected via cables

    My computer / iTunes is set up correctly for wireless (account info. all good), and emial is synched wirelessly.  BUT not photos / videos or songs.  I seem to have to plug my iPhone into my computer for iTunes to recognize my device.  Shouldn't iTunes recognize my iphone wirelessly?  For example, I have read that "device" should show up in menu bar on iTunes but it doesn't unless I'm cabled in.
    Also, when I go to my iPhone to "synch wirelessly with iTunes", the button / tab doesn't light up for me to chose and tells me will synch when "smith - laptop" is available.....
    This is my first iPhone, and just got it so may be user error.....
    thanks

    Did you build Elsa with this package from AUR: elsa-svn-arch
    The way your elsa.conf looks like indicates to me that you have not.
    Please use the package because you are also missing pam-files.

  • How do I STOP synching contacts with FB?

    I accidently answered yes at the initial setup - but I no longer want to synch FB with my contacts.  Does anyone know how to change that setting?
    I have the iPhone 4  (not S)
    TIA!

    It's Settings > Facebook > turn off Contacts.
    And if you do not want all the Facebook birthdays and events on your Calendar turn off Calendar in the same location.

  • All of the music on my Ipod Touch is blown out after I synched it with my new MacBook. I didn't get the 'synch' warning-- but now can't find my library of songs. I'm about to panic!

    All of the music on my Ipod Touch is blown out after I synched it with my new MacBook. I didn't get the 'synch' warning-- but now can't find my library of songs. I'm about to panic!

    The iPod backup that iTunes makes does not inlcuded synced media like apps and music. Thes those iTunes are not restored to the iPod unless they are in the iTunes library.
    Try:
    - Reset the iOS device. Nothing will be lost
    Reset iOS device: Hold down the On/Off button and the Home button at the same time for at
    least ten seconds, until the Apple logo appears.
    - Unsync all music and resync
    - Reset all settings
    Go to Settings > General > Reset and tap Reset All Settings.
    All your preferences and settings are reset. Information (such as contacts and calendars) and media (such as songs and videos) aren’t affected.
    - Restore from backup. See:       
    iOS: How to back up
    - Restore to factory settings/new iOS device.

  • How to Create a table with numeric trigger for INSERT

    Let me start off by saying that I am very new to DBMS.
    I need to create a Table with INSERT Trigger. I am not exactly sure if I need to have a BEFORE ot AFTER insert trigger but leanning towards AFTER.
    I have a Java code that will need insert a row each time that piece of code is executed. I would also like an oracle trigger to insert a unique numeric value (REC_ID) for that that record.
    I am totally lost and I am not sure how to go about it. Can you point me to the right direction?
    Basically my table will have the following 3 columns
    REC_ID NUMBER NOT NULL (uniquie value inserted by the trigger)
    PROPERTY_NAME VARCHAR2(100 BYTE)
    PROPERTY_VAL VARCHAR2(100 BYTE)
    Thank you in advance
    Eric

    Take a look at the following: Also please do a search in this forum.
    http://infolab.stanford.edu/~ullman/fcdb/oracle/or-jdbc.html

  • When I click "configure" in Synch Contacts with Google, I enter my google ID and PW, but it doesn't seem to take.  I tried the same thing with Yahoo, and nothing happens.  What is the problem?

    This issue is similar to a question that was asked in Dec 2010, but was not answered, and has not been archived.
    I'm hoping someone might have an idea.
    OS: Vista
    iTunes:  10.3.1.55
    iPhone 4: 4.2.8
    Problem with iPhone contacts synchronization settings
    I am having problems with iPhone contacts synchronization settings in iTunes 10. I have: - iPhone 4 - OS 4.2.1 - Windows Vista PC When I view the device in iTunes and click on "Info" at the top of the screen, I see a box to "Synch contacts with"...in iTunes for Windows,by lindsacl,Dec 4, 2010

    Start Firefox in [[Safe Mode]] to check if one of your add-ons is causing your problem (switch to the DEFAULT theme: Tools > Add-ons > Themes).<br />
    See [[Troubleshooting extensions and themes]] and [[Troubleshooting plugins]]<br />
    <br />
    If it does work in Safe-mode then disable all your extensions and then try to find which is causing it by enabling one at a time until the problem reappears.<br />
    You can use "Disable all add-ons" on the [[Safe mode]] start window to disable all extensions.<br />
    You have to close and restart Firefox after each change via "File > Exit" (Mac: "Firefox > Quit"; Linux: "File > Quit")<br />
    See also http://kb.mozillazine.org/Java#Multiple_Java_Console_extensions

  • Who can help me with a trigger?

    Hi, I've got a little problem with my database that can be solved, or so I think, with a trigger. First of all, here it is.
    create table utente
    (id_utente number(5) Primary Key,
    nome varchar2(40),
    sexo varchar2(1) check (sexo='M' or sexo='F'),
    morada varchar2(60),
         data_nascimento date,
         contacto number(10),
         numero_BI number(9)
    create table servico
    (id_servico number(5) Primary Key,
         descricao varchar2(40),
         valor number(5),
         data_inicio date,
    data_fim date,
    check (data_fim>=data_inicio)
    create table modalidade
    (id_modalidade number(5) Primary Key,
         descricao varchar2(40),
         valor number(5)
    create table quarto
    (id_quarto number(5) Primary Key,
         descricao varchar2(40)
    create table inscricao_servico
    (id_inscricao_servico number(5) Primary Key,
         id_servico number(5) references servico(id_servico),
         id_utente number(5) references utente(id_utente),
         data_pagamento date
    create table inscricao_mod
    (id_inscricao_mod number(5) Primary Key,
         id_modalidade number(5) references modalidade(id_modalidade),
         id_utente number(5) references utente(id_utente),
         data_inscricao date,
         data_cessacao date,
    check (data_cessacao>data_inscricao)
    create table estadia
    (id_estadia number(5) Primary Key,
         id_utente number(5) references utente(id_utente),
         id_quarto number(5) references quarto(id_quarto),
         data_entrada date,
         data_saida date,
    check (data_saida>data_entrada)
    create table pag_mensalidade
         (id_pag_mensalidade number(5) Primary Key,
         id_inscricao_mod number(5) references inscricao_mod(id_inscricao_mod),
         mes_mensalidade number(6),
         data_pagamento date,
         unique (id_inscricao_mod,mes_mensalidade)
    insert into utente values (1, 'Manel', 'M', 'Rua grande', to_date('80.02.02','yy.mm.dd'), 123456789, 687654321);
    insert into utente values (2, 'Artur', 'M', 'Rua pequena', to_date('81.03.04', 'yy.mm.dd'), 223456789, 587654321);
    insert into utente values (3, 'Cardoso', 'M', 'Rua estreita', to_date('82.04.05', 'yy.mm.dd'), 323456789, 487654321);
    insert into utente values (4, 'Abílio', 'M', 'Rua larga', to_date('79.07.06', 'yy.mm.dd'), 423456789, 787654321);
    insert into utente values (5, 'Antunes', 'M', 'Rua nova', to_date('79.06.01', 'yy.mm.dd'), 423557982, 387654822);
    insert into modalidade values (1, 'Total', 800);
    insert into modalidade values (2, 'Diurno ate 18', 600);
    insert into modalidade values (3, 'Diurno ate 22', 700);
    insert into quarto values (1, '412');
    insert into quarto values (2, '413');
    insert into quarto values (3, '414');
    insert into quarto values (4, '415');
    insert into quarto values (5, '416');
    insert into servico values (1, 'Excursao a Fatima', 150, to_date('11.05.13', 'yy.mm.dd'), to_date('11.05.13', 'yy.mm.dd'));
    insert into servico values (2, 'Ida ao cinema', 10, to_date('11.08.22', 'yy.mm.dd'), to_date('11.08.22', 'yy.mm.dd'));
    insert into servico values (3, 'Apoio domiciliario', 100, to_date('11.07.01', 'yy.mm.dd'), to_date('11.07.31', 'yy.mm.dd'));
    insert into estadia values (1, 1, 1, to_date('11.05.05', 'yy.mm.dd'), null);
    insert into estadia values (2, 2, 2, to_date('10.01.02', 'yy.mm.dd'), null);
    insert into estadia values (3, 3, 3, to_date('09.12.15', 'yy.mm.dd'), to_date('10.02.25', 'yy.mm.dd'));
    insert into inscricao_mod values (1, 1, 1, to_date('09.12.15', 'yy.mm.dd'), null);
    insert into inscricao_mod values (2, 2, 2, to_date('11.11.11', 'yy.mm.dd'), null);
    insert into inscricao_mod values (3, 1, 3, to_date('10.04.10', 'yy.mm.dd'), to_date('11.09.21', 'yy.mm.dd'));
    insert into inscricao_servico values (1, 1, 1, null);
    insert into inscricao_servico values (2, 1, 2, to_date('11.10.01', 'yy.mm.dd'));
    insert into inscricao_servico values (3, 2, 4, null);
    insert into inscricao_servico values (4, 3, 5, to_date('10.12.12', 'yy.mm.dd'));
    insert into pag_mensalidade values (1, 1, 201110, to_date('11.10.23', 'yy.mm.dd'));
    insert into pag_mensalidade values (2, 2, 201111, to_date('11.11.27', 'yy.mm.dd'));
    insert into pag_mensalidade values (3, 3, 201112, NULL);
    insert into pag_mensalidade values (4, 1, 201111, NULL);
    drop table estadia;
    drop table inscricao_servico;
    drop table quarto;
    drop table pag_mensalidade;
    drop table inscricao_mod;
    drop table modalidade;
    drop table servico;
    drop table utente;
    Ok, the problem is: the table 'estadia' means 'stay' and 'quarto' means 'room'. I need to, before inserting on 'estadia', to check if that room is available or not.
    I may do this:
    insert into estadia values (4, 3, *3*, to_date('09.12.15', 'yy.mm.dd'), to_date('10.02.25', 'yy.mm.dd'));
    but if, after this command, i do this:
    insert into estadia values (5, 4, *3*, to_date('09.12.15', 'yy.mm.dd'), to_date('10.02.25', 'yy.mm.dd'));
    it accepts and it shouldn't, because I'm putting users 3 and 4 in the same room at the same time.
    the 3rd field is the room id and the next two fields are the entry date (data_entrada) and the exit date (data_saida). If a room is related to a specific stay in which the exit date hasn't gone by, that room shouldn't be available. Also, the exit date may be null, meaning that the exit date is unknown.
    I hope to have been clear about my question.
    Thanks, Chiapa

    This is a fairly easy business rule which can be implemented using triggers. Here goes.
    Tables (my version):
    drop table stay;
    drop table room;
    create table room
    (room_id     number not null primary key
    ,other_col     varchar2(10) not null)
    create table stay
    (stay_id     number not null primary key
    ,room_id     number not null references room(room_id)
    ,arrive          date not null check(trunc(arrive)=arrive)
    ,depart          date          check(trunc(depart)=depart)
    ,unique (room_id,arrive)
    ,check(arrive <= depart))
    /The rule you are trying to implement is this one:
    create or replace assertion no_overlap as
    check(not exists
            (select 'two overlapping stays for a room'
             from stay s1
                 ,stay s2
             where s1.room_id = s2.room_id
               and s1.stay_id != s2.stay_id
               and (s1.arrive between s2.arrive and nvl(s2.depart,s1.arrive) or
                    s1.depart between s2.arrive and nvl(s2.depart,s1.depart))
    /Sometime in a far far away future, we may be done now. That future has still to arrive though.
    So here's the trigger-code and supporting objects:
    create or replace procedure p_get_Lock(p_lockname    in varchar2) as
    pl_id number(38);
    pl_return number;
    pl_timeout number := 0;
    begin
      -- Go get a unique lockhandle for this lockname.
      pl_id := dbms_utility.get_hash_value(name      => p_lockname
                                          ,base      => 1
                                          ,hash_size => power(2,30));
      -- Request the application lock in X-mode.
      pl_return :=
      dbms_lock.request(id                => pl_id
                       ,lockmode          => dbms_lock.ssx_mode
                       ,timeout           => pl_timeout
                       ,release_on_commit => true);
      if pl_return not in (0,4)
      then
        raise_application_error(-20000,'Could not serialize for business rule.');
      end if;
    end;
    create global temporary table stay_te
    (room_id     number not null)
    create or replace trigger stay_aiur
    after insert or update on stay
    for each row
    begin
      if inserting or
         (updating and (:new.room_id != :old.room_id or
                        :new.arrive < :old.arrive or
                        :new.depart > :old.depart))
      then
        insert into stay_te(room_id) values(:new.room_id);
      end if;
    end;
    create or replace trigger stay_aius
    after insert or update on stay
    begin
      for r in (select distinct room_id
                from stay_te)
      loop
        p_get_lock(to_char(r.room_id));
        declare
          p_error varchar2(80);
        begin
          select 'Overlapping stays for room '||to_char(r.room_id)||'.'
          into p_error
          from dual
          where exists
            (select 'two overlapping stays for a room'
             from stay s1
                 ,stay s2
             where s1.room_id = s2.room_id
               and s1.room_id = r.room_id
               and s1.stay_id != s2.stay_id
               and (s1.arrive between s2.arrive and nvl(s2.depart,s1.arrive) or
                    s1.depart between s2.arrive and nvl(s2.depart,s1.depart))
          raise_application_error(-20000,p_error);
        exception when no_data_found then
          null;
        end;
      end loop;
      delete from stay_te;
    end;
    /Haven't tested it, but I think it's all okay.

  • Can't synch photos with Vista

    This is driving me crazy! I have no problems synching music with Vista, but every time I attempt to synch photos, the photos are corrupted, don't download properly or - more often than not - the computer crashes with a variety of bluescreen error messages! Any ideas please? Everything works fine on my old XP!
    Acer T180   Other OS   Windows Vista Home Premium

    lordy. if you were getting that combo on XP or 2000, i'd be worried about a major viral infection on the PC. but i don't have so much experience with the VIsta BSODs as with the XP/2000 beasties, so let's not jump to that conclusion just yet.
    it would be good to see if the crashes are all being produced by a single driver (or set of related drivers). so let's try getting a mindump or two to the Apple engineers for a look.
    To set up your machine to capture a minidump, right click on "My Computer", select "Properties", select the "Advanced" tab, select the "Startup and Recovery" Settings button, select "small memory dump" from the popup. When it crashes, look for the MiniDump file. It's usually in the folder "C:\WINDOWS\Minidump" and is called something like Mini<number>-<number>.dmp.
    generate a crash and collect a minidump (or, if you've already been set up to collect minidumps, gather together a few of the itunes-related ones), and send it/them as an attachment/s to this email address.
    in the email to Roy, be sure to include the following information:
    - A link to the thread on Apple Discussions where the issue is being discussed
    - The username you are using in the thread
    - The version of iTunes you are using or trying to use
    - the version of Windows you are using (mention service packs)
    - A concise description of the issue you are seeing
    - The exact text of the error message you are seeing

Maybe you are looking for