Documente Academic
Documente Profesional
Documente Cultură
ParacrearunStoredpodemosutilizarelEnterpriseManageroelQueryAnalizer.
SilohacemosporelEnterpriseManager,encimadelabasededatos,desplegaremoslacarpeta
destoreds,botnderechoy"NewStoredProcedure"
ElEnterpriseManagerpordefectopone:
CREATEPROCEDURE[OWNER].[PROCEDURENAME]AS
EnProcedureNamecolocamoselnombredelStoredquedeseamos,yacontinuacindelASlas
consultasquequeramos:
CREATEPROCEDUREDIC_FORO
AS
SETNOCOUNTON
SELECT
Campos
FROM
Tabla
With(NoLock)
SETNOCOUNTOFF
GO
LosStoredsadmitenparmetros.Sirvenparapoderrealizarquerysmsprecisas.
Porejemplo:
CREATEPROCEDUREDIC_FORO
(
@IdUsuarioint=0
)
AS
SETNOCOUNTON
SELECT
*
FROM
Usuario
With(NoLock)
WHERE
Usuario=@IdUsuario
SETNOCOUNTOFF
GO
Tambinpodemosutilizarparmetrosdesalida,pararetornardatos.Paraellodeclararemosel
parmetrocomoOutput.
USE AdventureWorks2012;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear';
DECLARE@CONTADORINT
SET@CONTADOR=1
WHILE@CONTADOR<1000
BEGIN
INSERTINTOTABLEVALUES('XXX')
CONTINUE
END
CONSULTA:
IFNOTEXISTS(Selectnombrefrompersonawnerenombre=@nombre)
Begin
Insertintopersona(nombre)values(@nombre)
End
10 Votes
Saludos amigos en esta ocasin leyendo me encontr con un tema muy interesante acerca de las
tablas temporales en SQL, les dejo lo que traduje del tema con una explicacin y ejemplo de
como crear tablas temporales locales, globales y variables de tabla, dentro del Motor de Base de
Datos de SQL Server 2008.
Tablas Temporales.
Las tablas temporales son consideradas tablas regulares, y estas se almacenan
automticamente en la base de datos de tempdb.
Como alternativa a los cursores: por ejemplo, en lugar de utilizar un cursor de Transact-SQL
para recorrer un conjunto de resultados y realizar tareas basadas en cada fila, en su lugar puede
utilizar una tabla temporal. Usando un bucle WHILE, puede recorrer cada fila de la tabla y realizar
la accin de la fila especificada, posteriormente debe eliminar la fila de la tabla temporal.
Como temporal en la sobrecarga baja de bsqueda de tabla: Por ejemplo, imagine que
usted est utilizando una consulta que tarda varios segundos en ejecutarse, pero slo muestra
un pequeo conjunto de resultados, el cual desea utilizar en varias reas de su procedimiento
almacenado, pero cada vez que se llama se incurre en el tiempo de ejecucin de la consulta
general. Para resolver esto, puede ejecutar la consulta una sola vez en el procedimiento,
llenando una tabla temporal, de esta manera se puede hacer referencia a la tabla temporal en
varios lugares en su cdigo, sin incurrir en una sobrecarga de resultados adicional.
Varias conexiones pueden crear una tabla temporal con mismo nombre, esto solo para para
tablas temporales Locales sin causar conflictos. La representacin interna de la tabla local tiene
un nombre nico, para no estar en conflicto con otras tablas temporales con el mismo nombre
creado por otras conexiones en la tempdb.
Las tablas temporales locales son eliminadas con el comando DROP o se eliminan
automticamente de memoria cuando se cierra la conexin del usuario.
CREATETABLE#ProductosResumen
(idProductointNOTNULLPRIMARYKEY,
nombrevarchar(75)NULL,
preciosmallmoneyNULL
);
INSERT#ProductosResumen(idProducto,nombre,precio)
SELECTid,nombre,precioFROMdbo.DEMO_PRODUCTO
ORDERBYnombre;
Seleccionandolosdatosdelatablatemporal
SELECT*FROM#ProductosResumen;
Resumendepreciosdelatablatemporal
SELECTAVG(precio)FROM#ProductosResumen;
Resultado.
Eliminando la tabla.
Eliminandolatablatemporal
DROPTABLE#ProductosResumen;
CreandolatablatemporalGlobal
CREATETABLE##Roles
(idRolintNOTNULLPRIMARYKEY,
nombrevarchar(30)NULL,
activobitNULL
);
Insertando y seleccionando datos de la tabla temporal global:
Insertandodatosenlatablatemporalglobal
INSERTINTO##Roles
VALUES(1,'Administrador',1),
(2,'Supervisor',1),
(3,'Programador',0)
Seleccionandolosdatosdelatablatemporalglobal
SELECT*FROM##Roles;
Resultado:
Eliminandolatablatemporalglobal
DROPTABLE##Roles;
Variables de Tabla.
Por otro lado tenemos las Variables de Tabla que son un tipo de datos que puede ser utilizados
en un lote Transact-SQL (Batch), procedimiento almacenado o funcin; estas variables de
tabla son creado y definidas de forma similar a una tabla, slo con un alcance de vida
estrictamente definido. Las Variables de tabla suelen ser buenos reemplazos de tablas
temporales siempre y cuando el conjunto de datos es pequeo.
Como se menciono anteriormente, hay inconvenientes para utilizar las variables de tabla. El
rendimiento de las variable de tabla se ve afectado cuando el resultado es demasiado
grande o cuando los datos de la columna de cardinalidad son fundamentales para la
optimizacin del proceso de consulta.
La sintaxis para crear una variable de tabla es similar a la de crear una tabla normal, se utiliza la
palabra clave DECLARE y el nombre de tabla, anteponiendo el smbolo @:
Creandolavariabledetipotabla.
DECLARE@EstatusUsuariosTABLE
(idEstatusintNOTNULLPRIMARYKEY,
nombrevarchar(30)NULL
Insertandoenlavariabledetipotabla.
INSERTINTO@EstatusUsuariosVALUES(1,'Activo'),
(2,'Inactivo'),
(3,'Bloqueado')
Consultandodatosdelavariabledetipotabla.
SELECT*FROM@EstatusUsuarios;
Creandolavariabledetipotabla.
DECLARE@EstatusUsuariosTABLE
(idEstatusintNOTNULLPRIMARYKEY,
nombrevarchar(30)NULL
Insertandoenlavariabledetipotabla.
INSERTINTO@EstatusUsuariosVALUES(1,'Activo'),
(2,'Inactivo'),
(3,'Bloqueado')
Consultandodatosdelavariabledetipotabla.
SELECT*FROM@EstatusUsuarios;
Alejecutarseelgooelbloquedeinstrucciones
lavariabletablaseeliminaraauitomaticamente.
Go
SELECT*FROM@EstatusUsuarios;
Espero les sea de ayuda, se que esta un poco largo el Post, pero creo vale la pena leerlo.
Apyame votando
aqu: http://blogit.ms/TopBloggers.aspx en la categora SQL Server. Los pasos para votar estn
aqu te llevara 3 min: Clic Aqu.
Etiquetas de Technorati: Tablas temporales,temporary tables,Local Tables,Global Tables,Variables
de Tabla,SQL 2008
JDBC permite llamar a un procedimiento almacenado en la base de datos desde una aplicacin
escrita en Java. El primer paso es crear un objeto CallableStatement. Al igual que con los
objetos Statement y PreparedStatement, esto se hace con una conexin
abierta,Connection. Un objeto CallableStatement contiene una llamada a un procedimiento
almacenado; no contiene el propio procedimiento. La primera lnea del cdigo siguiente crea una
llamada al procedimiento almacenado SHOW_SUPPLIERS utilizando la conexin con. La parte
que est encerrada entre corchetes es la sintaxis de escape para los precedimientos
almacenados. Cuando un controlador encuentra "{call SHOW_SUPPLIERS}", traducir esta
sintaxis de escape al SQL nativo utilizado en la base de datos para llamar al procedimiento
almacenado llamado SHOW_SUPPLIERS.
CallableStatementcs=con.prepareCall("{callSHOW_SUPPLIERS}");
ResultSetrs=cs.executeQuery();
La hoja de resultados de rs ser similar a esto.
SUP_NAME COF_NAME
Acme,Inc. Colombian
Acme,Inc. Colombian_Decaf
SuperiorCoffee French_Roast
SuperiorCoffee French_Roast_Decaf
TheHighGround Espresso
Observa que el mtodo utilizado para ejecutar cs es executeQuery porque cs llama a un
procedimiento almacenado que contiene una peticin y esto produce una hoja de resultados. Si
el procedimiento hubiera contenido una sentencia de actualziacin o una sentencia DDL, se
hubiera utilizado el mtodo executeUpdate. Sin embargo, en algunos casos, cuando el
procedimiento almacenado contiene ms de una sentencia SQL producir ms de una hoja de
resultados, o cuando contiene ms de una cuenta de actualizacinm o alguna combinacin de
hojas de resultados y actualizaciones. en estos casos, donde existen mltiples resultados, se
debera utilizar el mtodo execute para ejecutar CallableStatement.
La clase CallableStatement es una subclase de PreparedStatement, por eso un
objetoCallableStatement puede tomar parmetros de entrada como lo hara un
objetoPreparedStatement. Adems, un objeto CallableStatement puede tomar parmetros
de salida, o parmetros que son tanto de entrada como de salida. Los parmetros INOUT y el
mtodo execute se utilizan raramente.
Ejecutar procedimiento almacenado desde Java
(JDBC)
En Java invocar a un procedimiento almacenado que no devuelve valores es
bastante sencillo hacerlo desde JDBC, funciona de la misma manera que
con cualquier base de datos, solo es cuestin de cambiar la cadena de
conexin y el driver, el resto va igual.
En el ejemplo veremos con MySQL, pero como vengo diciendo cambien los
2 factores y podrn usarlo con cualquier otro motor de base de datos.
1 packageconexionDB;
2
3 importjava.sql.Connection;
4
5 publicclassConexionMySQL{
6
7 publicstaticConnectioncon_mysql;
8
9 publicstaticConnectionconectar(StringpHost,StringpUser,StringpPassword,String
10 Exception{
11 try{
12 StringdatabaseURL="jdbc:mysql://"+pHost+"/"+pDataBase;
13 Class.forName("com.mysql.jdbc.Driver");
14 con_mysql=java.sql.DriverManager.getConnection(databaseURL,pUser,
15 //System.out.println("ConexionconMySQLEstablecida..");
16 }catch(Exceptione){
17 e.printStackTrace();
18 thrownewException(e);
19 }
20 returncon_mysql;
21 }
}
Publicarlo en Twitter
1
Publicarlo en Delicious
Aadirlo a LinkedIn
Publicarlo en Facebook