sql >> Databasteknik >  >> RDS >> Oracle

orakeluttryck av fel typ vid kontroll av variabel

Det är inte så du ska jämföra värdena för data_length och data_precision . Jämför dem som korrekta tal, konvertera inte det till en sträng:

DECLARE 
  old_length NUMBER;
  old_prec   NUMBER;
BEGIN

  SELECT data_length, coalesce(data_precision,0)
     INTO old_length, old_prec 
  FROM user_tab_cols 
  WHERE table_name='EX_EMPLOYEE' 
    AND column_name='ID';

  IF (old_length <> 6 and old_prec <> 2) THEN
    EXECUTE IMMEDIATE ('ALTER TABLE EX_EMPLOYEE MODIFY ID NUMERIC(6,2)');
  END IF;

END;
/

Observera att SELECT COUNT(*) efter det första valet är värdelöst. Om det inte finns någon sådan kolumn den första SELECT data_length, data_precision INTO kommer redan att skicka en ORA-01403: no data found undantag och koden kommer aldrig att nå kontrollen om kolumnen finns.



  1. Oracle ODP.Net With Entity Framework 6 - ORA-00955 på Välj från tabellvy

  2. LIKE-kommandot Mysql

  3. jqGrid - Unikt ID för ny rad

  4. Hur kan ett Oracle NUMBER ha en skala större än precisionen?