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

Parse SQL via Oracles JDBC-driver

Du kan bruge Oracle DBMS_SQL-pakken til at parse en sætning i en streng. For eksempel:

SQL> declare
  2    c integer;
  3    l_statement varchar2(4000) := 'insert into mytable (col) values (1,2)';
  4  begin
  5    c := dbms_sql.open_cursor;
  6    dbms_sql.parse(c,l_statement,dbms_sql.native);
  7    dbms_sql.close_cursor(c);
  8  end;
  9  /
declare
*
ERROR at line 1:
ORA-00913: too many values
ORA-06512: at "SYS.DBMS_SYS_SQL", line 824
ORA-06512: at "SYS.DBMS_SQL", line 32
ORA-06512: at line 6

Du kunne pakke det ind i en gemt funktion, der lige returnerede f.eks. 1 hvis sætningen var gyldig, 0 hvis ugyldig, sådan her:

function sql_is_valid
  ( p_statement varchar2
  ) return integer
is  
  c integer;
begin
  c := dbms_sql.open_cursor;
  dbms_sql.parse(c,p_statement,dbms_sql.native);
  dbms_sql.close_cursor(c);
  return 1;
exception
  when others then 
    return 0;
end;

Du kan derefter bruge det noget som dette PL/SQL-eksempel:

:n := sql_is_valid('insert into mytable (col) values (1,2)');



  1. At gaffel eller ikke at gaffel?

  2. hvordan forespørger jeg min database og får den udlæst på et Google Sheet, så nogen kan redigere disse data og derefter få dem reflekteret tilbage i MySQL?

  3. Sådan masseændrer du MySQL Triggers DEFINER

  4. Tjek om sekvensen findes i Postgres (plpgsql)