viernes, 25 de junio de 2010

BD Oracle: constraints, sequence, For en PL/SQL

Constraints
Como vemos las constraints de una tabla en una base de datos Oracle? Así:
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'nombre_tabla'

También hay otras queries utiles por si esa no te sirve:
select * from user_cons_columns
select * from all_cons_columns
select * from all_constraints

Sequence value
Para obtener el valor de una secuencia se ejecuta lo siguiente:
SELECT nombre_de_la_secuencia.CURRVAL FROM dual

Puede que ese comando te tire un error 08002 que indica que la secuencia no está definida en la sesión. Esto se soluciona facilmente llamando al siguiente valor de la secuencia:
SELECT nombre_de_la_secuencia.NEXTVAL FROM dual

Y bueno, en un insert con id secuenciado se usa: nombre_de_la_sequencia.NEXTVAL

Bloque FOR en PL/SQL
BEGIN
-- use a FOR loop to process a series of numbers
  DBMS_OUTPUT.enable;
  FOR i in 2476..2486 LOOP
    update nloqt_veh_atr_fam_d set lib_grp_fam = (SELECT to_char(b.ID_ATR_FAM) from nloqt_veh_atr_fam_d b where b.id_atr_fam = to_char(i))  where id_atr_fam = to_char(i);
    DBMS_OUTPUT.PUT_LINE('Updatee el id: ' || TO_CHAR(i) || ', wiii (?)');
  END LOOP;
END;