Activar Driver PDO con XAMPP o servidores APACHE
1. Verificar las extensiones de PDO activadas
php -i|grep PDO
2. Descomentar las librerias pdo para el driver que se va utilizar(MYSQL, PGSQL, ec) del archivo PHP.INI
sudo nano /opt/lampp/etc/php.ini
si no utilizas xampp utliza la ruta de tu php.ini
utilizando GEDIT
sudo gedit /opt/lampp/etc/php.ini
# mysql
extension=php_pdo_mysql.dll
# Posgress
extension=php_pdo_pgsql.dll
extension=php_pgsql.dll
algo asi
3. instalar el driver
-activar para postgress
sudo apt-get install php7.0-pgsql
-activar para mysql
sudo apt-get install php7.0-mysql
Mostrando las entradas con la etiqueta Postgress SQL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Postgress SQL. Mostrar todas las entradas
martes, 4 de abril de 2017
viernes, 5 de junio de 2015
UPDATE from SELECT using SQL Server, MYSQL
UPDATE
geocoder,
cellocator_historial
SET
geocoder.GPSX = cellocator_historial.GPSX,
geocoder.GPSY = cellocator_historial.GPSY
WHERE
geocoder.idcellocator = cellocator_historial.idcellocator
AND cellocator_historial.idcellocator BETWEEN 10 AND 10000 ;
UPDATE
table_to_update,
table_info
SET
table_to_update.col1 = table_info.col1,
table_to_update.col2 = table_info.col2
WHERE
table_to_update.ID = table_info.ID
UPDATE business AS b
INNER JOIN business_geocode AS g ON b.business_id = g.business_id
SET b.mapx = g.latitude,
b.mapy = g.longitude
WHERE (b.mapx = '' or b.mapx = 0) and
g.latitude > 0
UPDATE
geocoder,
cellocator
SET
geocoder.idvehiculoestado="1"
where cellocator.idcellocator = geocoder.idcellocator
AND cellocator.RMUId="564730"
AND geocoder.idvehiculo= 26
AND geocoder.CellDateTime > "2015-07-30 11:01:35"
AND geocoder.CellDateTime <= "2016-04-29 18:24:12"
AND cellocator.Speed >= "2"
UPDATE ubigeo AS distrito
INNER JOIN ubigeo AS provincia ON provincia.codigo = concat(LEFT(distrito.codigo, 4),'00') AND provincia.tipo_ubigeo_id = 2
INNER JOIN ubigeo AS departamento ON departamento.codigo = concat(LEFT(distrito.codigo, 2),'0000') AND departamento.tipo_ubigeo_id = 1
SET
distrito.descripcion = CONCAT(distrito.ubigeo,', ' , provincia.ubigeo ,', ' ,departamento.ubigeo)
WHERE distrito.tipo_ubigeo_id = 3 ;
referencia http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server
Para Insert Into
INSERT INTO address (address.GPSX, address.GPSY)
SELECT DISTINCT
ROUND(GPSX ,3) ,
ROUND(GPSY ,3)
FROM geocoder
WHERE (geocoder.address <> "" ) ;
miércoles, 19 de noviembre de 2014
Habilitar controlador de Postgresql en XAMPP
Habilitar controlador de Postgresql en XAMPP
La herramienta de desarrollo XAMPP es es un servidor de plataforma libre, el cual integra en una sola aplicación, un servidor web Apache, interpretes de lenguaje de scripts PHP, un servidor de base de datos MySQL, un servidor de FTP FileZilla, el popular administrador de base de datos escrito en PHP, MySQL, entre otros módulos
Como antes se especificó por defecto esta configurado para trabajar con el motor de base de datos MySQL, pero en algunos casos se requiere trabajar con otros motores de base de datos.
Es por ello que este apartado se enfoca a la habilitación de los archivos de configuración de xampp para poder trabajar con la base de datos Postgres.
A continuación los siguientes pasos:
- Abrir el archivo de configuración de php, el cual se encuentra en el siguiente directorio
- C:\xampp\php\php.ini
- Dentro de ese archivo buscar la sección de extensiones y descomenta las siguientes lineas
- extension=php_pdo_pgsql.dll
- extension=php_pgsql.dll
- Ahora guardar los cambios realizados en el archivo: php.ini
De esta manera hemos habilitado que reconozca driver de postgres. Para constatar lo que hemos hecho, realizamos lo siguiente.
Abrir un navegador web y digitar la siguiente direccion: localhost/
y aparecerá la siguiente imagen anterior, donde debemos dar clic donde esta seleccionado de color rojo: phpinfo() y luego dirigirse hacia abajo hasta encontrar algo parecido a la siguiente imagen.
Como se puede observar la esta reconociendo el driver de postgres.
También debemos tener en cuenta añadir los siguientes archivos:
- Buscar en el directorio de instalación de postgres, bajo \bin los siguientes archivos
- libpq.dll
- libintl.dll o debe de estar como libintl-8.dll
- Copiar los archivos anteriores al siguiente directorio
- C:\xampp\apache\bin
Listo prueba tu conexión y debe ejecutar correctamente
Etiquetas:
PHP,
Postgress SQL,
Programcion
lunes, 22 de septiembre de 2014
La recursion es divina - Consultas recursivas en SQL
El lenguaje SQL no solía ser lo mas comodo para realizar consultas en donde participe el concepto de "recursión", pero claramente algunos problemas son muy incomodos si los abordamos de otra forma. Por suerte para nosotros, desde la aparición de las CTE, esto ha cambiado y ahora es "simple" realizar consultas recursivas, veremos un ejemplo de como podemos realizarlo.
- CREATE TABLE #Empleados(idEmpleado INT, Nombre VARCHAR(10), idJefe INT)
- INSERT INTO #Empleados
- SELECT 0, 'Bob', null UNION
- SELECT 1, 'Tom', 0 UNION
- SELECT 2, 'Joe', null UNION
- SELECT 3, 'John', 2 UNION
- SELECT 4, 'Ringo', 1 UNION
- SELECT 5, 'Paul', 4
- SELECT * FROM #Empleados
Esta tabla contiene los empleados de una empresa e indica sus respectivos jefes. Lo divertido es que los jefes son también empleados, por lo tanto son registros de la misma tabla.
Supongamos que quiero averiguar el nombre del jefe de cada empleado. Esto lo puedo realizar con un "self join" sin necesidad de recursividad.- SELECT e.Nombre Empleado, j.Nombre Jefe
- FROM #Empleados e
- INNER JOIN #Empleados j ON e.idJefe=j.idEmpleado;
Pero ahora supongamos que quiero una consulta mas compleja, una que me retorne no el jefe directo, sino el jefe superior de cada empleado. Cualquiera que tenga conocimientos de algoritmos sabe que la mejor forma de responder a esta pregunta es con una estructura recursiva. No pretendo en éste artículo escribir que es la recursión, sino como utilizarla en SQL, así que daré por sentado que saben de que hablo.
Una estructura recursiva requiere básicamente de dos partes:
1) El caso base
2) El caso recursivo
Para escribir esto utilizaremos una CTE que tendrá estas dos partes, y deben unirse con un UNION ALL. La primer parte será el caso base (en el WHERE debo filtrar para que lo sea) y en la segunda el caso recursivo, el cual hace un JOIN con la CTE. Este join es lo que indica que es un caso recursivo. Nótese que defino la cte utilizandola a ella misma, por eso mismo es recursiva.
- WITH cte
- AS(
- -- Caso base
- SELECT e.idEmpleado, e.Nombre Nombre, e.idEmpleado Jefe
- FROM #Empleados e
- WHERE e.idJefe IS NULL
- -- Fin Caso base
- UNION ALL
- -- Caso recursivo
- SELECT e.idEmpleado, e.Nombre Nombre, j.Jefe
- FROM #Empleados e
- INNER JOIN cte j ON e.idJefe=j.idEmpleado
- -- Fin Caso recursivo
- )
- SELECT c.Nombre Empleado, j.Nombre Jefe
- FROM cte c
- INNER JOIN #Empleados j ON c.Jefe=j.idEmpleado
- DROP TABLE #Empleados
Con esto obtengo el código del jefe superior de cada uno, entonces en el SELECT lo cruzo con la tabla de empleados para obtener su nombre. Parece medio confuso pero es cuestión de acostumbrarse.
Hay algunos inconvenientes que pueden presentarse, pero eso lo comentaré en el próximo artículo.
Visita mi Blog dentro de los Blogs de Informática en Coobis.
sábado, 26 de abril de 2014
PROCEDIMIENTOS ALMACENADOS EN POSTGRESQL
PROCEDIMIENTOS ALMACENADOS EN POSTGRESQL
En PostgreSql a diferencia de otros motores de bases de datos, no existe una distinción explicita entre una función y un procedimiento almacenado. En PostgreSql solo existen funciones, claro que estas pueden ser usadas a modo de una función o de un procedimiento almacenado. Además de esta diferencia con otros motores de bases de datos, es importante mencionar que PostgreSql nos ofrece más de un lenguaje para crear nuestros procedimientos almacenados, pudiendo elegir entre los siguientes lenguajes:
En lo personal siempre me he inclinado por Pl/PgSQL pues es un lenguaje procedural basado en SQL y que sigue el estándar ANSI SQL. Si deseas conocer más de Pl/PgSQLaquí puedes encontrar la documentación oficial.
En este artículo veremos cómo se crean funciones en PostgreSql que nos devuelven un recordset y para ello usaremos la misma lógica del procedimiento almacenado creado en Mysql para el artículo “Procedimientos almacenados de Mysql desde Excel Con VBA y ADO“. Y de igual forma al procedimiento en mysql, crearemos una función en PostgreSql que nos devuelva un recordset conteniendo una lista de países, esto claro, dependiendo del valor pasado a través de un parámetro de entrada.
Para crear la función, ejecutaremos pgAdmin III
Y una vez autenticados en nuestro servidor y seleccionada la base de datos en que trabajaremos ejecutaremos el editor de consultas SQL que se encuentra en la barra de herramientas:
Y se nos mostrará el editor de consultas, en el que podremos ejecutar tanto código PLSQL como SQL.
Una vez abierto nuestro editor el primer paso será crear la tabla lista_paises y para ello deberemos ejecutar el siguiente bloque SQL, modificando antes el userpostgrepor el usuario que usas en tu servidor.
1
2
3
4
5
6
7
8
9
10
| CREATE TABLE lista_paises( id integer DEFAULT 0, opcion character varying(100) DEFAULT ''::character varying)WITH ( OIDS=FALSE);ALTER TABLE lista_paises OWNER TO userpostgre; |
Ya que tenemos la tabla comenzaremos a crear nuestra función. Para ello primero definimos el encabezado, y aquí es importante mencionar que en este caso, donde vamos a devolver un recordset, deberemos declarar tantos parámetros de salida como columnas tenga nuestra consulta:
1
2
3
4
5
| CREATE OR REPLACE FUNCTION SP_DamePaises ( IN PV_OPCION VARCHAR(10) default 'DAMETODOS', OUT columna1 int, OUT columna2 varchar(100) ) RETURNS setof record AS |
Dado que la función devolverá un recordset conteniendo las columnas id y opción, hemos agregado ambos parámetros de salida a la función y hemos agregado el parámetro de entrada Pv_Opcion que usaremos a manera de menú de selección para decirle a la función que bloque deberá ejecutar. Al final del encabezado establecemos el tipo de dato que devolverá la función que en este caso será un recordset o setof record.
Declarado el encabezado vamos a continuar con el cuerpo de la función que contendrá las operaciones a realizar:
1
2
3
4
5
6
7
8
9
10
11
12
| $BODY$begin IF PV_OPCION = 'DAMETODOS' THEN return query select id, opcion from lista_paises; END IF; IF PV_OPCION = 'DAMECINCO' THEN return query select id, opcion from lista_paises limit 5; END IF; return;end;$BODY$LANGUAGE 'plpgsql'; |
Como podemos ver, el código es muy parecido al usado en Mysql, con las variantes de que aquí debemos establecer con return query el recordset a devolver, además de tener que indicar el lenguaje a usar y el inicio y fin del cuerpo de la función.
Para ejecutar el procedimiento almacenado ejecutaremos la sentencia que nos devolverá el listado:
1
| Select * From SP_DamePaises('DAMETODOS'); |
Una vez que lo hayamos ejecutado obtendremos el siguiente resultado:
Y para terminar aquí está el bloque completo de la función:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| CREATE OR REPLACE FUNCTION SP_DamePaises ( IN PV_OPCION VARCHAR(10) default 'DAMETODOS', OUT columna1 int, OUT columna2 varchar(100) ) RETURNS setof record AS$BODY$begin IF PV_OPCION = 'DAMETODOS' THEN return query select id, opcion from lista_paises; END IF; IF PV_OPCION = 'DAMECINCO' THEN return query select id, opcion from lista_paises limit 5; END IF; return;end;$BODY$LANGUAGE 'plpgsql'; |
REFERENCIA : http://elpoli.delphiaccess.com/procedimientos-almacenados-en-postgresql/
Suscribirse a:
Entradas (Atom)


