Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/08/2006, 13:45
lenz
 
Fecha de Ingreso: agosto-2003
Mensajes: 203
Antigüedad: 21 años, 4 meses
Puntos: 0
Relacionar nombre tabla con sequence

Estoy migrando una base desde Postgre a Oracle y necesito pasar una funcion que tiene como parametros el nombre de la tabla y el nombre del campo y devuleve el nombre de la sequence.
Esta es la funcion original
Código:
CREATE OR REPLACE FUNCTION "public"."get_sequence" ("sTabla" varchar, "sCampo" varchar) RETURNS varchar AS
$body$
DECLARE
	sTabla ALIAS FOR $1;
	sCampo ALIAS FOR $2;
	sSecuencia VARCHAR;
BEGIN
	SELECT
		s.relname INTO sSecuencia
	FROM
		information_schema.columns c,
		information_schema.tables t,
		pg_catalog.pg_statio_user_sequences s
	WHERE
		t.table_schema = 'public' AND
		c.table_name = t.table_name AND
		c.table_schema = 'public' AND
		c.table_name = sTabla AND
		c.column_name = sCampo AND
--		c.column_default = 'nextval(''public.' || s.relname || '''::text)' AND
		c.column_default LIKE 'nextval(''public.' || s.relname || '%' AND		
		s.schemaname = 'public';

	RETURN sSecuencia;
END;
$body$
Al intentar pasarlo no logro encontrar la relacion entre las tablas y los sequences.
Asi esta la funcion en Oracle, aunque no funciona
Código:
CREATE or replace FUNCTION get_sequence(sTabla IN VARCHAR2, sCampo IN VARCHAR2)
RETURN VARCHAR2
   AS
   sSecuencia  VARCHAR2(255);
BEGIN
   begin
      SELECT
      s.sequence_name INTO sSecuencia
      FROM
	all_sequences s,
	all_cons_columns c
      WHERE
      c.table_name = sTabla AND
      c.column_name = sCampo AND      
      s.sequence_owner = 'PUBLIC';
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
         NULL;
   end;
   RETURN sSecuencia;
END;
Espero me puedan ayudar