sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Finns det något sätt att få nya SQL-syntaxfel?

Du kan skapa en trigger i Oracle som loggar alla fel (eller i stort sett alla - NO_DATA_FOUND anses inte vara ett fel). I exemplet nedan registreras alla fel i schemat i TRACK_DETAIL-tabellen (fel på en rad, misslyckad SQL i nästa). Du kan göra det mer sofistikerat med ett sekvensnummer, datum/tid etc.

create table track_detail (val varchar2(4000));

create or replace procedure track (p_text IN VARCHAR2) IS
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
  insert into track_detail(val)
  values (p_text);
  commit;
end;
.
/
create or replace TRIGGER log_err after servererror on schema
DECLARE
  v_temp VARCHAR2(2000) := substr(dbms_utility.format_error_stack,1,2000);
  v_num NUMBER;
  v_sql_text ora_name_list_t;
begin
  v_temp := translate(v_temp,'''','"');
  track(v_temp);
  v_num  := ora_sql_txt(v_sql_text);
  v_temp := null;
  BEGIN
    FOR i IN 1..v_num LOOP
      v_temp := v_temp || v_sql_text(i);
    END LOOP;
  EXCEPTION
    WHEN VALUE_ERROR THEN NULL;
  END;
  v_temp := translate(v_temp,''''||chr(0)||chr(10),'"');
  track(v_temp);
end;
/

Kom ihåg att släppa (eller inaktivera) utlösaren när du är klar med den.



  1. Hur man återställer Amazon RDS Master User Password

  2. SQLite kan inte öppna databasfil (kod 14) vid frekvent SELECT-fråga

  3. Olika sätt att övervaka SQL Server AlwaysOn-tillgänglighetsgrupper

  4. hibernate kunde inte hämta nästa sekvensvärde