sql >> Database teknologi >  >> RDS >> Oracle

Sådan kalder du en procedure, der bruger den samme tabel i efter trigger

Det kan du ikke.

En normal udløser på rækkeniveau kan ikke forespørge på den tabel, som udløseren er defineret på, fordi det ville fremkalde en muterende tabelundtagelse. Jeg går ud fra, at det er grunden til, at du har erklæret din trigger til at bruge en autonom transaktion (en autonom transaktion til alt andet end vedvarende logning er næsten helt sikkert en fejl). Hvis du gør det, kan din trigger dog ikke se de uforpligtede ændringer, der er foretaget af den udløsende transaktion. Det er det problem, du støder på nu.

Et alternativ ville være at bruge en sammensat trigger . Du vil erklære en samling af test_table.type_%type , vil du tilføje de værdier, der ændrer sig til denne samling, i rækkeniveaudelen af ​​din trigger, og derefter gentage elementerne i samlingen i eftersætningsdelen af ​​din trigger. En udløser på sætningsniveau har tilladelse til at forespørge i tabellen, hvorpå triggeren er defineret, så du kan kalde din procedure fra eftersætningsdelen af ​​din sammensatte trigger.



  1. Sådan giver du adgang til v$-visninger (v$session ,v$instance)

  2. Opret en indlejret tabel, og indsæt kun data i den indre tabel

  3. SQLAlchemy gennem Paramiko SSH

  4. Lagret procedure hæver inkompatibel med sql_mode=only_full_group_by selvom sql_mode er tom