Colaboraciones en el Guille

Migrar la Instrucción Update desde Sql Server a Oracle

 

Fecha: 04/Abr/2006 (04-Abr-2006)
Autor: Hermilson Tinoco - hertino_sql@hotmail.com 

 


En algunas ocasiones se necesita desarrollar aplicaciones conectadas a diversas plataformas de bases de datos. El caso más común es migrar procedimientos almacenados entre servidores Oracle y SQL Server.

Aquí tratare de migrar las dos clases más comunes de updates desde SQL Server a Oracle.

Nota: para los ejemplos se utiliza la base de datos Northwind de SQL Server.

1. Update sencillo:

Update en SQL Server

update	Customers
set	Region = 'Northern'
where	City = 'London'
Migrado a Oracle:
UPDATE	Customers
SET	Region = 'Northern'
WHERE	City = 'London';

Esta clase de actualizaciones se migran fácilmente ya que no requieren modificaciones.

2. Update relacionado con otra tabla:

Update en SQL Server

update	Orders
set	ShipRegion = 'Northern'
from	Orders o, Customers c
where	c.CustomerID = o.CustomerID
and	c.City = 'London'

Migrado a Oracle:
Esta clase de actualizaciones requiere la creación de un cursor en Oracle, y luego ejecutar el Update dentro del cursor.

--Declaración del cursor (En los procedimientos se realiza en la parte inicial, en la región de declaraciones)
UF1_rowid 	ROWID;
UF1_oval1 	Orders.ShipRegion%TYPE;

CURSOR UF1_cursor IS 
	SELECT	o.ROWID, 'Northern'
	FROM	Orders o, Customers c 
	WHERE	c.CustomerID = o.CustomerID  
	and	c.City = 'London'
	FOR UPDATE OF o.ShipRegion;


--Ejecución del cursor y actualización (en los procedimientos se escriben en la región del cuerpo)
BEGIN
	OPEN UF1_cursor;
	LOOP
		FETCH UF1_cursor INTO UF1_rowid, UF1_oval1;
		EXIT WHEN UF1_cursor%NOTFOUND;

		UPDATE	Orders o
		SET 	ShipRegion = UF1_oval1
		WHERE	ROWID = UF1_rowid;

	END LOOP;
	CLOSE UF1_cursor;
END;

 


ir al índice principal del Guille