Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas

lunes, 12 de septiembre de 2011

cursor en SQL Server

Ejemplo de como hacer un cursor dentro de un proceso almacenado para una base de datos SQL Server.

DECLARE cursor CURSOR
LOCAL FAST_FORWARD
FOR
SELECT col1, col2
FROM tabla
WHERE columna = filtrp
OPEN cursor
FETCH NEXT FROM cursor INTO @resultadocol1, @resultadocol2
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE tabla2
SET col = @resultadocol1
WHERE otracol = @resultadocol2
FETCH NEXT FROM cursor INTO @resultadocol1, @resultadocol2
END
CLOSE cursor
DEALLOCATE cursor

lunes, 18 de abril de 2011

sql update masivos

Esta vez me he visto en la necesidad de actualizar masivamente los valores de una columna de una tabla, con los valores de otra tabla.
La consulta sql que me ha salido es la siguiente:
UPDATE tabla
SET campo = CampoDeLaOtraTabla
FROM tabla inner join OtraTabla
ON tabla.id = OtraTabla.id
WHERE filtro = FiltroQueQueramos
Nota: No es necesario utilizar una sentencia WHERE

viernes, 28 de enero de 2011

consulta a dos bases de datos

Como hacer una consulta sql a dos bases de datos SQL Server de manera simultanea:
SELECT *
FROM bd1.dbo.tabla1
INNER JOIN bd2.dbo.tabla2
ON tabla1.cod = tabla2.cod

Siendo bd1 y bd2 las bases de datos

domingo, 26 de abril de 2009

conectar a una base de datos con php

Para no estar repitiendo líneas de código, yo recomiendo crear un fichero aparte con la siguiente función:

function conectarBD(){
$host = "";
$user = "usuarioBD";
$pas = "contraseñaBD";
$bd = "nombreBD";
mysql_connect($host, $user, $pas) or die("Error al conectar con el servidor de la Base de Datos");
mysql_select_db($bd) or die("Error al seleccionar la Base de Datos");
}
?>

Así en cada pagina en php que queramos conectar con la base de datos, solo tendremos que incluir al principio del fichero php las siguientes líneas:

require_once "fichero.php"
sesion_start();
conectarBD();

A partir de este punto ya podemos ejecutar sentencias del tipo mysql_query o mysql_fetch_assoc entre otras.

¡OJO! Tengo que advertir que este manual es solo para conectar a una base de datos y no estoy teniendo en cuenta ningún aspecto de la seguridad web

jueves, 5 de marzo de 2009

error toad 'IN' is not a valid integer value

Si trabajáis con Oracle y con la herramienta de administración TOAD, es posible que al crear o editar un proceso almacenado te salga una ventana con el mensaje:

'IN' is not a valid integer value



Los motivos pueden ser los siguientes:
  • Actualizar la versión del Oracle
  • Conectarte a una base de datos Oracle 11g con una versión del TOAD inferior a 8.6
  • Si dudas de otro motivo te invitamos a ponerlo en los comentarios
No te preocupes, la solución es bien sencilla, solo tienes que remplazar la vista ALL_ARGUMENTS estando autenticado como usuario SYS.

El código de la vista a remplazar es el siguiente:


CREATE OR REPLACE VIEW ALL_ARGUMENTS

(OWNER, OBJECT_NAME, PACKAGE_NAME, OBJECT_ID, OVERLOAD,

ARGUMENT_NAME, POSITION, SEQUENCE, DATA_LEVEL,

DATA_TYPE, DEFAULT_VALUE, DEFAULT_LENGTH, IN_OUT, DATA_LENGTH,

DATA_PRECISION, DATA_SCALE, RADIX, CHARACTER_SET_NAME, TYPE_OWNER,

TYPE_NAME, TYPE_SUBNAME, TYPE_LINK, PLS_TYPE, CHAR_LENGTH,

CHAR_USED, SUBPROGRAM_ID)

AS

SELECT

u.name, /* OWNER */

NVL(a.PROCEDURE$,o.name), /* OBJECT_NAME */

DECODE(a.PROCEDURE$,NULL,NULL, o.name), /* PACKAGE_NAME */

o.obj#, /* OBJECT_ID */

DECODE(a.overload#,0,NULL,a.overload#), /* OVERLOAD */

a.argument, /* ARGUMENT_NAME */

a.position#, /* POSITION */

a.SEQUENCE#, /* SEQUENCE */

a.LEVEL#, /* DATA_LEVEL */

DECODE(a.TYPE#, /* DATA_TYPE */

0, NULL,

1, DECODE(a.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),

2, DECODE(a.scale, -127, 'FLOAT', 'NUMBER'),

3, 'NATIVE INTEGER',

8, 'LONG',

9, DECODE(a.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),

11, 'ROWID',

12, 'DATE',

23, 'RAW',

24, 'LONG RAW',

29, 'BINARY_INTEGER',

69, 'ROWID',

96, DECODE(a.charsetform, 2, 'NCHAR', 'CHAR'),

100, 'BINARY_FLOAT',

101, 'BINARY_DOUBLE',

102, 'REF CURSOR',

104, 'UROWID',

105, 'MLSLABEL',

106, 'MLSLABEL',

110, 'REF',

111, 'REF',

112, DECODE(a.charsetform, 2, 'NCLOB', 'CLOB'),

113, 'BLOB', 114, 'BFILE', 115, 'CFILE',

121, 'OBJECT',

122, 'TABLE',

123, 'VARRAY',

178, 'TIME',

179, 'TIME WITH TIME ZONE',

180, 'TIMESTAMP',

181, 'TIMESTAMP WITH TIME ZONE',

231, 'TIMESTAMP WITH LOCAL TIME ZONE',

182, 'INTERVAL YEAR TO MONTH',

183, 'INTERVAL DAY TO SECOND',

250, 'PL/SQL RECORD',

251, 'PL/SQL TABLE',

252, 'PL/SQL BOOLEAN',

'UNDEFINED'),

DEFAULT$, /* DEFAULT_VALUE */

deflength, /* DEFAULT_LENGTH */

DECODE(in_out,NULL,'IN',1,'OUT',2,'IN/OUT','Undefined'), /* IN_OUT */

LENGTH, /* DATA_LENGTH */

PRECISION#, /* DATA_PRECISION */

DECODE(a.TYPE#, 2, scale, 1, NULL, 96, NULL, scale), /* DATA_SCALE */

radix, /* RADIX */

DECODE(a.charsetform, 1, 'CHAR_CS', /* CHARACTER_SET_NAME */

2, 'NCHAR_CS',

3, NLS_CHARSET_NAME(a.charsetid),

4, 'ARG:'||a.charsetid),

a.type_owner, /* TYPE_OWNER */

a.type_name, /* TYPE_NAME */

a.type_subname, /* TYPE_SUBNAME */

a.type_linkname, /* TYPE_LINK */

a.pls_type, /* PLS_TYPE */

DECODE(a.TYPE#, 1, a.scale, 96, a.scale, 0), /* CHAR_LENGTH */

DECODE(a.TYPE#,

1, DECODE(bitand(a.properties, 128), 128, 'C', 'B'),

96, DECODE(bitand(a.properties, 128), 128, 'C', 'B'), 0), /* CHAR_USED */

a.PROCEDURE# /* SUBPROGRAM ID */

FROM obj$ o,argument$ a,USER$ u

WHERE o.obj# = a.obj#

AND o.owner# = u.USER#

AND (owner# = USERENV('SCHEMAID')

OR EXISTS

(SELECT NULL FROM v$enabledprivs WHERE priv_number IN (-144,-141))

OR o.obj# IN (SELECT obj# FROM sys.objauth$ WHERE Grantee# IN

(SELECT kzsrorol FROM x$kzsro) AND privilege# = 12))

/


Recomendaciones:
Antes de editar la vista ALL_ARGUMENTS recomendamos hacer una copia.

Fuentes:
nabble
arjudba

Esperamos que os sirva de ayuda.

lunes, 21 de julio de 2008

PL/SQL Bucle for al reves

El otro día en el curro, necesitaba hacer un para un proceso almacenado (stored procedure) un bucle for al revés, como no sabía tuve que googlear, así que por si ha alguien le pasa lo mismo, os pongo aquí la sentencia:

FOR i IN REVERSE inicio..fin LOOP
-- Instrucciones
EN LOOP;

Siendo i una variable numérica e inicio y fin también, aunque también se puede poner el número directamente, aquí tenéis el ejemplo de un bucle for de 10 a 0:

FOR i in REVERSE 0..10 LOOP
-- Instrucciones
END LOOP;

Fuente |
Estructuras de control en PL/SQL

¡Saludos y plsqlear!

miércoles, 2 de abril de 2008

Lo útimo en acceso a datos -> LINQ

El pasado jueves 13 de Marzo, soy_informático, asistió a la presentación del Visual Studio 2008 en Valencia. Para poder enterarnos de las ultimas tendencias en las herramientas de desarrollo de software.
Nos comentaron los aspectos más novedosos de la herramienta Visual Studio 2008, también se hablo sobre la nueva capa de presentación de Windows, la WPF. Y otras charlas de servicios web y programación distribuida.
Pero la conferencia que más me llamo la atención fue sobre la nueva manera de acceder a bases de datos desde nuestras aplicaciones Windows o páginas web, LINQ.
Con LINQ se quiere reducir la complejidad del acceso a datos e integrar la información que no se define de manera nativa utilizando la tecnología orientada a objetos. Como por ejemplo bases de datos relacionales o datos en ficheros XML.
Cito textualmete de la página de Microsoft donde explican que es LINQ.
Language Integrated Query - LINQ
Utilizamos el término consultas integradas en los lenguajes para indicar que las consultas son una característica integrada del lenguaje de programación principal del desarrollador (por ejemplo C#, Visual Basic). Las consultas integradas en los lenguajes permiten que las expresiones de consulta se beneficien de los metadatos ricos, verificación de sintaxis en tiempo de compilación, tipado estático y ayuda IntelliSense que antes estaban disponibles solo para el código imperativo. Las consultas integradas en los lenguajes también hacen posible aplicar una única facilidad declarativa de propósito general a toda la información en memoria, y no solo a la información proveniente de fuentes externas.

Con esto, los desarrolladores damos un paso adelante a la hora de hacer nuevas aplicaciones, ya que cada vez nos tenemos que preocupar menos en los diferentes lenguajes de programación o de que manera están almacenados los datos "por debajo" y nos podemos centrar en atender las necesidades de los usuarios, que es lo realmente importante.

La presentación:

Según los ponentes que hicieron posible la presentación del Visual Studio 2008 en Valencia, el evento fue un éxito ya que fue la tercera ciudad de toda España con más asistentes. Yo nunca había participado en un evento de este tipo y tengo que decir que siempre esta bien ir a este tipo de charlas ya que te ahorran mucho tiempo de lectura por la red.

Como regalito final os dejo un vídeo del poder de WPF.
Saludos.


lunes, 17 de diciembre de 2007

Manual para la instalación de oracle 9i en windows

En el curro nos ha dado ultimamente problemillas el servidor de Oracle y nos hemos puesto a instalarlo de nuevo. Buscando información por internet he encontrado un par de enlaces interesantes, así que los pongo aquí por si a alguien le sirve de algo.


Geek-Consejo: Si vais a reinstalar oracle os recomiendo que elimineis todo lo que halla en c:\oracle o en su defecto donde lo tuvierais instalado, ya que aunque desistales oracle, se siguen quedadon ficheros y directorios que luego pueden provocar incompativilidades.
Un saludo.

Enlaces:
Instalación de oracle 9i en windows
Articulos y documentación para oracle en castellano.