ORACLE

All posts tagged ORACLE

Enviar emails utilizando el paquete UTL_HTTP de Oracle

Función para enviar emails utilizando el paquete UTL_HTTP de Oracle.
La función es básicamente esta, en la que tenéis que cambiar los datos de los destinatarios, del envío, adjuntos, y el link_mail desde dónde se realizará.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
FUNCTION ejemplo_mail (envelope CLOB, link_mail VARCHAR2) RETURN CLOB IS
      vresult            VARCHAR2 (512);
      verror             VARCHAR2 (10);
 
      soapenvelope       VARCHAR2 (32767);
      soapenvio   		 VARCHAR2 (32767);
      soapcompleto       CLOB;
      http_req           UTL_HTTP.req;
      http_resp          UTL_HTTP.resp;
      xmldoc             XMLTYPE;
      xmlresp            XMLTYPE;
   BEGIN
 
      soapenvelope := '<?xml version="1.0" encoding="utf-8"?>
                <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                <SOAP-ENV:Header>
                <SOAP-ENV:Body>
                               <mail:sendMail xmlns:mail="http://mail.example/">
                               <from>desde@mail.com</from>
                               <to>para@mail.com</to>    
                               <cc>concopia@mail.com</cc>    
                               <bcc>concopiaoculta@mail.com</bcc>   
                               <subject>Asunto del Mail</subject>    
                               <content>Este es un mail de prueba</content>    
                               <attachmentFileName>fichero_adjunto.txt</attachmentFileName>                           
                               <attachMentContent></attachMentContent>
                </mail:sendMail>    
                </SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
 
 
      -- La conversión a UTF8 nos daba problemas, así que remplazamos los carácteres
	  -- Evitamos el error "Invalid byte 2 of 2-byte UTF-8 sequence"
 
      soapenvelope := REPLACE(soapenvelope, 'Ñ', '&#xF1;');
	  soapenvelope := REPLACE(soapenvelope, 'á', '&#xE1;');
	  soapenvelope := REPLACE(soapenvelope, 'é', '&#xE9;');
	  soapenvelope := REPLACE(soapenvelope, 'í', '&#xED;');
	  soapenvelope := REPLACE(soapenvelope, 'ó', '&#xEF;');
 
 
 
      UTL_HTTP.set_persistent_conn_support (TRUE);
      UTL_HTTP.set_transfer_timeout (180);
      BEGIN
         http_req := UTL_HTTP.begin_request (link_mail, 'POST', 'HTTP/1.1');
		 -- link_sw = http://enviarmail.com:7001/sendMail
         UTL_HTTP.set_header (http_req, 'Content-Type', 'text/xml');
         UTL_HTTP.set_header (http_req, 'Content-Length', LENGTH (soapenvelope));
         UTL_HTTP.set_header (http_req, 'SOAPAction', '');
         UTL_HTTP.write_text (http_req, soapenvelope);       
         http_resp := UTL_HTTP.get_response (http_req);
         soapcompleto := '';
 
         LOOP
            UTL_HTTP.read_text (http_resp, soapenvio);
            soapcompleto := soapcompleto || soapenvio;
         END LOOP;
 
         UTL_HTTP.end_response (http_resp);
      EXCEPTION
         WHEN UTL_HTTP.end_of_body
         THEN
            UTL_HTTP.end_response (http_resp);
      END;
 
      RETURN (soapcompleto);  
    END ;
Leer más

Realizar un import de un fichero .dmp (IMP)

Partiendo de un fichero .dmp que contenga una copia o backup de una base de datos, o de la estructura de las tablas, podemos realizar una importación utilizando el comando IMP

Import fichero .dmp Oracle

El comando para importar datos en Oracle 9i…11g es imp.
Si queréis ver los detalles del comando o mostrar la ayuda, podéis hacerlo escribiendo por consola la siguiente sentencia:

imp help=yes

Para hacer un import basta con introducir el comando acompañado del usuario/password, el fichero de log en el que queréis que se guarde la información referente al comando, y por último indicar dónde se encuentra el fichero .dmp que tiene almacenado la parte de la base de datos que quieres importar o restaurar.

IMP usuario13/pass LOG=fichero.log FILE=fichero.dmp

Como muestra la siguiente imagen:

imp

Leer más

Crear un report con Oracle Reports

Para crear un report con el wizard de Oracle Reports tenemos que seguir los siguientes pasos:

Creamos un nuevo report y le indicamos que queremos que se cree automáticamente, con el Wizard, en este caso vamos a seleccionar que cree sola la página web, de la que finalmente podemos ver el código HTML

reports1 wizard oracle forms

Nos pedirá el nombre del Report que va a mostrar y el diseño de las columnas que queremos mostrar en el Report, aunque después nos dejará seleccionar un estilo que modificará el aspecto visual del report.

reports columnas oracle forms

Seleccionamos SQL Query, para generar la consulta, e introducimos la consulta que queremos utilizar en el informe.

reports sql oracle select

Seleccionamos las columnas y si queremos que salga el conteo de las columnas en el informe:

reports informe columnas count

Finalmente le damos a terminar y podemos ver el código HTML que nos ha generado.

reports codigo jsp

Leer más

Solución al error de instalación de Oracle 11g XE

Al instalar la edición de Oracle 11g XE en un Windows 7 de 64 bits me ha mostrado una alerta con el siguiente error:

1
The installer is unable to instantiate the file C:\Users\Miguel\AppData\Local\Temp\{078E83D7-3FCC-4A72-903B-995C7CE44681}\KEY_XE.reg. The file does not appear to exist.

En la página de Oracle pone que esta edición no funciona en un equipo Windows con 64bits, no obstante como veremos más adelante, si corregimos este error funciona correctamente.

El error ocurre porque el instalador no es capaz de escribir en el registro de Windows la linea que muestra en el error.

Para solucionarlo, basta con ir al regedit y buscar la key o clave en la que tenemos que introducir el valor que nos muestra el error, en la siguiente imagen se ve más claro.

La ruta en el regedit es esta:

1
HKEY_CLASSES_ROOT\Installer\Products\266B7A503A089BE4EAD1986A429434C1\SourceList\Media

error oracle



Incialmente la clave identificada con ’1′, tendrá el valor : DISK, que tenéis que cambiar por el valor que os indica el error, en mi caso es este:


1
C:\Users\nombreDelEquipo\AppData\Local\Temp\{078E83D7-3FCC-4A72-903B-995C7CE44681}\

Vuestra cadena será muy parecida, solo tenéis que sustituir el nombre del equipo, que en mi caso es ‘miguel’ por el nombre que tenga vuestro equipo (lo encontráis en equipo-> botón derecho->propiedades…), nombre original para una máquina virtual :).

Y con esto funciona correctamente, y podéis correr la edición de Oracle 11g XE en un Windows 7 de 64 bits.

Leer más

Protocolo de la capa aplicación | HTTP

Protocolo HTTP

Denominado como protocolo de transferencia de hipertexto este protocolo funciona en la capa aplicación, consta de dos programas, que funcionan como programa cliente y como programa servidor.

Así pues, una página web puede estar formada de varios objetos, el documento html, imágenes, aplets, etc.

El navegador del cliente actuaria como agente del usuario (del cliente) y proporcionará diversas funcionalidades además de la página que solicites al servidor. Es el navegador el que interpretará la página web, por lo tanto posible que cada navegador lo interprete de una manera diferente.

El servidor no guarda el estado en ningún momento, por lo tanto el servidor HTTP no guarda ninguna información sobre el estado del cliente. HTTP es un protocolo sin estado.

El protocolo HTTP puede utilizar conexiones persistentes o no persistentes. Como ejemplo si pedimos una página web a un servidor y la página consta de un HTML y 5 objetos, en una conexión persistente solo se hará una conexión TCP, mientras que en una conexión no persistente se utilizarán múltiples conexiones TCP, una por cada objeto solicitado.

Estas conexiones pueden ser paralelas para mejorar el rendimiento, por lo que un navegador puede realizar x conexiones al mismo tiempo en vez de ir realizando una conexión tras otra (en serie), que habitualmente alargaría el tiempo de conexión.

Utilizando conexiones persistentes el servidor mantiene abierta una conexión TCP para que las siguientes peticiones y respuestas se transmitan por esa conexión.

Cabecera de petición HTTP

Cuando solicitamos una página web, nuestro navegador crea una cabecera que será enviada al servidor para solicitar la página en cuestión.

Las cabeceras que generes serán parecidas es esto:

GET / HTTP/1.1
Host: codigojavaoracle.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
Connection: close

La primera línea se llama línea de petición, las demás serán las líneas de cabecera.
GET corresponde al método por el que pedimos la página
/ corresponde a la dirección dentro del host.
HTTP/1.1 corresponde a la versión que utiliza el navegador.

Host, obviamente es el host al que se solicita la petición
User-Agent corresponde al navegador que utiliza
Connection: close, Indica que no queremos una conexión persistente

Si queréis ver cabeceras de petición HTTP podéis generarlas desde esta website
rexswain.com

Respuesta de petición HTTP

Después de recibir esto el servidor generará un mensaje de respuesta parecido al nuestro, dónde tendrá una línea inicial de estatus, varias líneas de cabecera y finalmente el objeto pedido.

Existen algunos códigos y mensajes establecidos, por ejemplo estos:

200 OK,
301 Moved Permanently
400 Bad Request
404 Not found… (Este código es el más famoso y podrás verlo cuando generes una página que no existe, o haya sido borrada etc.)

Mantener el estado

Cookies

Como hemos comentado antes el protocolo HTTP es un protocolo sin estado. Ahora bien, si el servidor quiere mantener el estado o conocer el estado del cliente puede hacerlo enviando una cookie al cliente, si el cliente permite que el servidor guarde una cookie con información del estado dentro de su equipo, el servidor podrá recuperarla y usarla para conocer el estado del cliente.

FTP

El protocolo FTP también es un protocolo de la capa aplicación que funciona sobre TCP, no obstante aunque tienen muchas características parecidas también tienen muchas diferencias.

El protocolo FTP utiliza dos conexiones TCP para transferir archivos una de ellas se encarga del control de la conexión y otra de la transferencia de los datos.

El protocolo FTP utiliza el puerto 21.

Leer más

Crear un nuevo usuario en Oracle

Vamos a crear un nuevo usuario en Oracle.

Podemos crear directamente el usuario, pero es mejor empezar creando el tablespace para datos y para índices.
Aquí es donde se almacena los objetos que va a crear el usuario.

CREATE TABLESPACE "TABLAS4" LOGGING DATAFILE 
'/export/home/oracle/oradata/datafiles/tablas.dbf'
SIZE 2000M REUSE  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO ;
 
CREATE TABLESPACE "INDICES4" LOGGING DATAFILE 
'/export/home/oracle/oradata/datafiles/indices.dbf'
SIZE 1500M REUSE  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

Ahora creamos el usuario:

CREATE TABLESPACE "NUEVOUSER" LOGGING DATAFILE
'/export/home/oracle/oradata/datafiles/users01.dbf'
SIZE 50M REUSE  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO ;
ALTER DATABASE DEFAULT TABLESPACE "USERS";

Ahora creamos el usuario y le decimos el tablespace que tiene por defecto y el que cogerá sino se lo indicamos:

CREATE USER "USU01" PROFILE "DEFAULT" IDENTIFIED BY "USU01PWD"
DEFAULT TABLESPACE "TABLAS4" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

Lo mismo ocurre cuando creamos tablas e índices, tenemos que indicar el tablespace correspondiente para las tablas y los índices que hemos creado antes.

Y ahora le damos permisos:

GRANT CONNECT, RESOURCE TO USU01;

Podemos darle permisos como administrador:

GRANT DBA TO USU01;

O podemos darles privilegios sobre objetos que nosotros decidamos:

GRANT ALTER ANY INDEX TO USU01;
GRANT CREATE ANY INDEX TO USU01;
GRANT DROP ANY INDEX TO USU01;
GRANT DROP ANY VIEW TO USU01;
GRANT INSERT ANY TABLE TO USU01;
GRANT SELECT ANY TABLE TO USU01;
GRANT UNLIMITED TABLESPACE TO USU01;

Y así sucesivamente. Podemos asignar permisos en ejecución de procesos, en directorios para el tratamiento de ficheros desde Oracle o paquetes Java, por ejemplo:

GRANT EXECUTE any PROCEDURE TO USU01;
GRANT READ, WRITE ON directory dir_firmas TO USU01;
 
EXEC dbms_java.grant_permission('USU01','java.io.FilePermission','/pruebas/-','read');
Leer más

Cómo subir plugins al repositorio de WordPress

En este artículo vamos a detallar los pasos que tenemos que hacer para seguir un plugin al repositorio de wordpress.

Antes de nada comentaros que los pasos son bastante sencillos, aunque yo no he visto mucha información al respecto y por ello puede parecer más complicado de lo que realmente es.

Para subir el plugin vamos a seguir estos tres pasos:

-Darnos de alta en WordPress Extend
-Enviar el plugin en un zip.
-Subirlo al repositorio de WordPress.
** Dudas y preguntas.

Primer paso. Darnos de alta en WordPress Extend

Para poder subir plugins necesitamos estar dados de alta en la web de WordPress Extend, basta con que vayas a esta dirección y te registres, recibirás un correo de confirmación con la contraseña.

El link dónde registrarte en WordPress Extend

Segundo paso. Rellenar el formulario y enviarlo

Ahora que tenemos nuestra cuenta, hacemos login y vamos al menú que tenemos a la izquierda, buscamos en Plugins, Developer Center y hacemos click en Add your Plugin.

El link dónde añadir plugins Add your Plugin

wordpress extend

Rellenamos el formulario, el primer campo será la dirección en el repositorio que te darán para tu plugin, si tu plugin se llama ToolBar to share, la dirección que te den cuando aprueben tu plugin será

http://wordpress.org/extend/plugins/toolbar-to-share/

El segundo campo es para la descripción de tu plugin, y no está de más que pongas una web en la que puedan ver tu plugin, aunque no es necesario.

El último campo es en el que tienes que añadir una dirección en un dominio tuyo desde la que puedan bajarse tu plugin, por ejemplo así:
codigojavaoracle.com/descargar-plugin

wordpress extend

Después de enviar el formulario, recibirás un mensaje como este en el que pone que han aprobado tu plugin, y los datos para entrar en tu repositorio:

Your plugin hosting request has been approved.

Within one hour, you will have access to your SVN repository at

http://plugins.svn.wordpress.org/popup-to-share/

with your WordPress.org/bbPress.org username and password (the same one you use on the forums).

Here’s some handy links to help you get started.

Using Subversion with the WordPress Plugins Directory

http://wordpress.org/extend/plugins/about/svn/

FAQ about the WordPress Plugins Directory

http://wordpress.org/extend/plugins/about/faq/

WordPress Plugins Directory readme.txt standard

http://wordpress.org/extend/plugins/about/readme.txt

readme.txt validator:

http://wordpress.org/extend/plugins/about/validator/

Enjoy!

Tercer paso. Subir el plugin al repositorio

Ahora que ya tienes tu dirección en el repositorio, WordPress te propone que uses Subversion para subir tu plugin. Subversion trabaja por consola o línea de comandos así que si este familiarizado con Linux, no te costará casi nada.

Versión Subversion:

# Create a local directory on your machine to house
# a copy of the repository.

$ mkdir my-local-dir

# Check out the repository

$ svn co http://plugins.svn.wordpress.org/your-plugin-name my-local-dir
> A	my-local-dir/trunk
> A	my-local-dir/branches
> A	my-local-dir/tags
> Checked out revision 11325.

# As you can see, subversion has added ( "A" for "add" )
# all of the directories from the central repository to
# your local copy.

# Copy the plugin files to the local copy.
# Put everything in the trunk/ directory for now.

$ cd my-local-dir/
my-local-dir/$ cp ~/my-plugin.php trunk/my-plugin.php
my-local-dir/$ cp ~/readme.txt trunk/readme.txt

# Let subversion know you want to add those new files
# back into the central repository.

my-local-dir/$ svn add trunk/*
> A	trunk/my-plugin.php
> A	trunk/readme.txt

No obstante, puedes utilizar cualquier otro cómo Tortuise. Tortuise tiene entorno gráfico y es más intuitivo de usar, puedes subir tu plugin así:

Haces una carpeta con tu plugin en tu máquina local y dentro de esa carpeta metes tu plugin. Por último te conectas con el repositorio y con el botón derecho sobre tu carpeta le das a commit, con esto subirías los ficheros al repositorio (commit sube los ficheros, update baja los ficheros).

Dudas y preguntas. Dónde subir los ficheros

En el directorio que tiene tu plugin en WordPress encontrarás 3 carpetas, branches, tag y trunks.

La primera branches no debes meter nada en ella, la usaremos para probar cosas y experimentar con ella siempre que queramos hacerlo, en principio no tenemos nada que hacer con ella.

La segunda tag es dónde tendrás que ir poniendo las versiones que vayas subiendo a modo de control de versiones o backup.

La última trunks es dónde tienes que subir tu plugin y en principio será la que se descarguen los usuarios, siempre que en el archivo readme no indiques otra cosa.

Con esto ya tienes tu plugin listo en el repositorio de Wordpress.

Leer más

Mostrar una imagen desde un Java Bean en Forms

Cuando utilizamos Oracle Forms para crear aplicaciones nos encontramos con algunas limitaciones. No obstante, Oracle Forms nos permite incluir aplicaciones desarrolladas en Java (Bean) dentro del propio Forms.

Incluir una imagen en Oracle Forms

En este caso queríamos incluir una imagen en Oracle Forms, y al ejecutarla desde Forms, Forms reduce tanto la resolución de la imagen como el número de colores.

Como no quedaba muy bien después de que Forms degradadase la imagen, hemos utilizado un Bean para llamar a la imagen original y así no Forms no tratará la imagen, dejando la imagen la calidad de la imagen original intacta.

La imagen de arriba muestra la imagen incluida en el Forms, mientras que la imagen de abajo sería el resultado de incluirla en un java Bean, así no perderá propiedades y se mostrará con la calidad original.

java bean imagen

Este el código que he utilizado para incluir la imagen, solo tenéis que incluir vuestra imagen y cambiar los tamaños en el código.

Código

Clase Marco

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package mypackage;
 
 
import java.beans.PropertyChangeEvent;
import javax.swing.JFrame;
import oracle.forms.ui.VBean;
import oracle.forms.handler.IHandler;
 
 
public class Marco extends VBean 
{   
 
  //private JFrame         framep = new JFrame();   
  private IHandler       m_handler; 
  Banner been;
 
  public Marco()  {
   	// framep.setVisible(true);          	
  }  
  public void init(IHandler handler)
  {
      m_handler = handler;
      super.init(handler);     
      been = new Banner(); 
 
     this.add(been);
     this.setVisible(true);
  }
public void propertyChange(PropertyChangeEvent evt) {
	// TODO Auto-generated method stub
 
}     
}

Clase Banner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package mypackage;
 
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.awt.*;
 
 
 
public class Banner extends JPanel 
{	
 
private Image imgFondo;
 
  public Banner(){	
	  ImagenFondoPanel(); 
  } 
 
  public void ImagenFondoPanel() {
	  preInit();
  }
 
	 private void preInit(){			
		   imgFondo = new ImageIcon(getClass().getResource("imagen2.png")).getImage();
		 }
 
	 protected void paintComponent(Graphics g) {
	  g.drawImage(imgFondo,00,00,null);
	 }
 
}

Integrar un java Bean en Oracle Forms

Si necesitas saber cómo incluir un Java Bean en tu aplicación sigue los siguientes pasos:

1- Copia el bean.jar dentro del directorio /forms/java

2- Edita el archivo formsweb.cfg y añadimos el bean.jar.

# Forms applet archive setting for JInitiator
archive_jini=f90all_jinit.jar, archivo.jar
# Forms applet archive setting for Microsoft Internet Explorer native
JVM archive_ie=f90all.cab, archivo.jar

3- Añadimos el Bean dentro de la pantalla (.fmb) y ponemos la ruta y el nombre del bean.jar

4- Dentro de la pantalla en tu editor de forms builder , navegamos hasta las propiedades del Bean, y en “Clases de implementación” añadimos: oracle/forms/archivo (sin la extensión).

Si quieres el código completo puedes descargártelo aquí

El password del zip es codigojavaoracle.com

Leer más

Gestión Documental y Captura de Documentos en JAVA y sobre Oracle

Dentro de la gestión documental y desarrollados en JAVA y totalmente aptos para correr sobre bases de datos Oracle existen distintos productos, entre ellos destaca Athento.

La digitalización y captura de documentos con su correspondiente automatización de tareas (clasificación de documentos, extracción de datos y enrutamiento de documentos) se está convirtiendo en la clave para mejorar procesos de negocio. En particular, existen 5 procesos organizacionales cuya mejora puede reportar enormes beneficios cuantificables y no cuantificables:

Gestión de Facturas: Según la IAPP (International Accounts Payable Professionals), la gestión manual de una factura cuesta alrededor de los $8 dólares a las empresas. No sólo porque este proceso es muy susceptible a la pérdida de información contable importante sino también porque es un proceso lento que requiere empleados administrativos dedicados a ello.

Gestión de Ordenes de Compra y de Ventas: Se ha demostrado que la gestión automática de estos procesos representa mejoras en la gestión de la liquidez de la empresa, permite detectar errores de manera más temprana en el proceso y reducir el tiempo del ciclo de gestión de este tipo de documentos.

Gestión de Contratos: Uno de los beneficios más importantes es evitar la pérdida de este tipo de documentos, dado sus implicaciones legales. Otro aspecto que hace atractiva la automatización de gestión de contratos es que según estudios en diversas empresas privadas y públicas, el volumen de contratos en las empresas es igual o ligeramente superior al volumen de facturas.

Gestión de Correspondencia de clientes y atención al cliente: Cartas, solicitudes, emails y otros mecanismos de comunicación del cliente con las empresas resulta crítico para la retención, gestión de reclamaciones y quejas u otros aspectos claves de las relaciones con clientes. La gestión de la correspondencia representa además beneficios producto de ahorros en costes y reducción del riesgo.

Gestión de documentos de Recursos Humanos: Los departamentos de personal son ricos en todo tipo de documentos. La gestión de estos documentos puede representar mejoras en los procesos de reclutamiento y contratación, gestión de salarios y vacaciones.

Athento, que como decimos, está desarrollado en JAVA y corre sobre distintas versiones de bases de datos ORACLE (así como otras tecnologías Oracle a nivel de servidor de aplicaciones, servidor web etc.) es una herramienta que elimina quebraderos de cabeza al personal técnico a la hora de instalar un ECM o gestor de contenido empresarial.

Leer más

Expresiones Regulares. Ejemplos

Expresiones Regulares.

En las expresiones regulares podemos encontrar literales y metacaracteres. Una manera fácil de entederlo es ver primero distinguirlos. Tenemos que tener claro que los metacaracteres son también llamados operadores.
Os voy a poner un listado de algunos, aunque Oracle soporta bastantes.
Entender esto bien os servirá no sólo para Oracle, si no para otros muchos lenguajes.

Metacaracteres.

Punto (.)
Coincide con cualquier carácter, eso si, sólo con un carácter.
Si yo tengo algo como.

ho.a
- La primera posición de ocurrencia deber ser h
- Seguido de o
- La tercera posición puede ser cualquier carácter.
- La cuarta posición deber ser a

Suma (+)
Coincide con una O MAS ocurrencias de la subexpresión que va delante.
ho+a.
- La primera posición de ocurrencia deber ser h
- Seguido de o, una o varias veces
- Después aparacer la a
Por ejemplo: hooooooooooooooooooooa

Asterisco (*)
Coincide con cero o más ocurrencias de la subexpresión que le precede al asterisco.
ho*a.

- Debe estar el carácter h, luego puede o no puede estar varias veces el carácter o. Y tiene que seguirle la ‘a’.
Por ejemplo hoooooa valdría pero también hoa y ha.

Corchete [char...]

Aquí se busca que coincida con UNA SOLA ocurrencia de la lista que hay entre los corchetes. Tenemos la opción de poder poner caracteres
y metacaracteres.

Por ejemplo ga[stk]o
Empezamos por que tenga el carácter g, seguido de a y despues SÓLO UNO de los carácteres entre corchetes [stk] seguido de una o.
Coincidiría gato y gaso por ejemplo. No coincidiria gasto ( hay más de un carácter del grupo)

Ahora dentro de estos corchetes podemos utilizar otros metacaracteres.

Guión (-)
Con él podremos establecer un rango.
Pongamos que queremos que uno de los carácteres esté entre [abcdef], podríamos ponerlo así o directamente [a-f].
Lo mismo sucedería con los números [123456789], que podríamos expresar así [1-9]

p[b-e][4-6]prueba
La cadena tiene que tener un literal p seguido de una letra que puede ser b,c,d ó e. Luego continuamos con un número 4,5 ó 6 y luego prueba.
Algo así pc5prueba, nos valdría. pf7prueba, no valdría ya la segunda letra y el tercer número no están en el rango.

El sombrerito (^)

Si lo ponemos seguido de una lista, estamos indicando los caracteres que NO DEBEN aparecer, para que se produzca una coincidencia.
Por ejemplo ga[^stk]o
Empezamos por que tenga el carácter g, seguido de a y despues NINGUNO de los carácteres entre corchetes [stk] seguido de una o.
Entonces encontrariamos coincidencia con gaso, pero por ejemplo gato, no entrarían.

La subexpresión (expr)

Esto considera que la expresión entre paréntesis tiene que aparecer o no tal y como está definida.

Considera a toda la expresión entre paréntesis como una unidad. La expresión puede ser una simple cadena de literales o una expresión compleja conteniendo otros metacaracteres. Analicemos la siguiente expresión regular

aparezco(puede)*aqui

Como habeís visto arriba si pongo un *, quiere decir que la cadena (puede) aparece o no.
Es decir, aquí habría concordancia con aparezcopuedeaqui, aparezcoaqui, aparecezcopuedepuedeaqui

Pipe (|)

El símbolo pipe indica UNO U OTRO. Si tenemos [v|b]aca
Coincidiría con vaca y con baca.

Y tendríais un montón de combinaciones posibles.
Aquí os dejo otro link donde podéis aplicar lo que hemos visto con las funciones de Oracle
REGEXP ORACLE

Leer más

Operadores en Google | Busquedas personalizadas

Qué son los operadores en Google

Si has llegado hasta aquí seguro que conoces que son los operadores que puedes utilizar cuando haces una consulta en Google.
No obstante podemos definiros como palabras clave que puedes añadir a tu búsqueda o consulta para personalizar o condicionar los resultados

Cómo se utilizan los operadores

Para utilizar un operador cuando haces una consulta en Google basta con poner el operador seguida de dos puntos y la página por la que quieres filtrar tu consulta, si estáis familiarizados con el lenguaje SQL sería parecido a utilizar un “where” en una consulta.
operador consulta Google Define

Operadores

cache:

Este operador hará que tu consulta muestre solo las versiones que Google tiene en su caché de tu página, es posible que si es muy reciente no la tenga.

Si escribimos en el navegador lo siguiente:
cache:www.codigojavaoracle.com Android
Google mostrará las páginas del dominio “www.codigojavaoracle.com” que tenga almacenadas en la cache que tengan la palabra “Android”.

link:

El operador link se utiliza para que la consulta muestre solo las páginas que están apuntado con un link a la página web que hayas indicado.
Recuerda que puedes encontrar diferentes resultados si utilizas las www en el dominio o no.
link:www.codigojavaoracle.com

related:

Este operador se utiliza para que Google te muestre las páginas que el considera que son similares a la página por la que has filtrado.
related:www.codigojavaoracle.com

info:

Este operador muestra la información que Google tiene de tu dominio, por lo general de la página principal y la metadescripción que hayas puesto en la cabecera de la web.
info:codigojavaoracle.com

define:

Este operador es muy amplio si pones una palabra después te mostrará páginas dónde definan esa palabra, como puede ser la wikipedia. No obstante, si pones un dominio te mostrará todas las páginas en las que este escrito ese dominio, ya sea en una firma, en un artículo, contenido, etc.

site:

El operador site mostrará las páginas que tengan la palabra que hayas puesto a continuación del operador.
No obstante, si pones un nombre de dominio común, por ejemplo gimnasio.com, Google mostrará tanto las páginas que sean www.gimnasio.com como www.todo.gimnasio.com y sucesivamente.

Link Externos Relacionados

En esta página de Google puedes completar la información si necesitas utilizar algún operador más.
Operadores en Google

Leer más

Oracle REGEXP Funciones

Oracle Database 10g ofrece cuatro funciones de expresiones regulares. Se pueden utilizar en SQL y PL / SQL. Sus utilidades son las siguientes:

Búsqueda de texto. Las expresiones regulares nos permiten hacer búsquedas complejas de cadenas de caracteres dentro de las columnas de nuestras tablas.
Formateo de datos. Podemos modificar los datos de las sentencias SELECT, invirtiendo palabras, agregando o quitando caracteres, etc.
Definición de constraints. A fin de forzar el contenido de una columna para que se ajuste a un formato determinado: casilla de correo, número telefónico, etc.
Manipulación de datos.

Antes de seguir leyendo esto, si no entendeís muy bien los patrones de búsqueda, echadle un vistazo a esto.

Entender los patrones de búsqueda o expresiones regulares

REGEXP_LIKE (cadena, expresiones regulares, modo).
Se puede utilizar en el WHERE y HAVING de una instrucción SELECT, en una secuencia de comandos de PL/SQL (devuelve un valor booleano) y también, se puede utilizar en una restricción CHECK.
La expresión regular se comparara con la cadena. El parámetro modo es opcional.

SELECT * FROM prueba DONDE REGEXP_LIKE (columna, 'expresion', 'i');
IF REGEXP_LIKE ('cadena', 'expresion') THEN
 / * CODIGO * / 
ELSE
 / * CODIGO * / 
END IF;
ALTER TABLE prueba ADD (columna mycolumn_regexp CHECK (REGEXP_LIKE (columna, '^ $ expresion')));

Por ejemplo si busco un formato tipo 12.1234567.12, la expresión seria del 0-9 en las primeras dos posiciones, del 0-9 en las siguientes siete y el final del 0-9 las dos últimas, entre medias los carácteres que sean.

IF NOT REGEXP_LIKE('&amp;&amp;CodCotizDestino', '[0-9]{2}/[0-9]{7}/[0-9]{2}') THEN
   RAISE FORMATO;
END IF;

Por ejemplo para un CIF, el primer carácter {1} debería tener ABCDEFGHKLMNPQS, el los siguientes siete del cero al nueve y la última posición lo que sea (.)

IF NOT REGEXP_LIKE(CIF, '[ABCDEFGHKLMNPQS]{1}[0-9]{7}.') THEN

En esta obligamos a que empiece por esas letras.

IF REGEXP_LIKE(CIF, '^[ABCDEFGHKLMNPQS]') THEN

REGEXP_SUBSTR (cadena, expresiones regulares, posicion, ocurrencia, modo) Devuelve la cadena que cumple la expresión regular. NO se parece a SUBSTR.
Si no coinciden devuelve NULL.
Es posible utilizar REGEXP_SUBSTR con una sola cadena o con una columna.
Se puede utilizar en las cláusulas SELECT para recuperar sólo una parte de una columna.
El parámetro posición especifica la posición desde la que empieza a buscar. El primer carácter tiene la posición 1.
El parámetro de ocurrencia especifica a partir de que aparición tiene que devolver la cadena. Se pone 1, para encontrar la primera aparición de la cadena-
Los últimos tres parámetros son opcionales.

SELECT REGEXP_SUBSTR (micolumna, 'expresion') FROM prueba;
valor: = REGEXP_SUBSTR ('cadena', 'expresion', 1, 1, 'i');

Por ejemplo tenemos un PLSQL que realizará un update de varios campos con los datos de un parámetro:
El parámetro es : 22.333.444.555 (Parametro);
Actualizará CAMPO1 con 22, CAMPO2 = 333, CAMPO3 = 444 y CAMPO4 = 555.

Por ejemplo tenemos un PLSQL que realizará un update de varios campos con los datos de un parámetro:
El parámetro es : 22.333.444.555

Actualizará CAMPO1 con 22, CAMPO2 = 333, CAMPO3 = 444 y CAMPO4 = 555.

DECLARE
   TYPE id_t IS TABLE OF PRUEBA.ID%TYPE;
   TYPE codigo_t IS TABLE OF CODIGO.CDDUP%TYPE;
   TYPE clase_t IS TABLE OF CLASE.CDCLASNM%TYPE;
   e_id id_t;
   e_codigo codigo_t;
   e_clase clase_t;
 
BEGIN
   UPDATE PRUEBA SET  CAMPO1 = REGEXP_SUBSTR('&amp;&amp;Parametro','[^.]+',1,1),
                   CAMPO2 =  REGEXP_SUBSTR('&amp;&amp;Parametro','[^.]+',1,2),
                   CAMPO3 =  REGEXP_SUBSTR('&amp;&amp;Parametro','[^.]+',1,3),
                   CAMPO4 =   REGEXP_SUBSTR('&amp;&amp;Parametro','[^.]+',1,4)
   RETURNING  ID, CODIGO, CLASE
   BULK COLLECT INTO e_id, e_codigo, e_clase;
 
  FOR i IN 1 .. SQL%ROWCOUNT LOOP
    DBMS_OUTPUT.PUT_LINE(' ID ' ||e_id(i) || ' CODIGO ' || e_codigo(i) ||
    ' CLASE ' || e_clase(i));
  END LOOP;
  COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('ERROR: ' || substr(sqlerrm, 1,80));
END;
/

Si no habeís entendido la sentencia UPDATE, hago que me devuelva las columnas ID, CODIGO, CLASE con RETURNING que han sido modificadas y las meto en las variables declaradas.
Luego en un for las escribo para verlas.

Algunos ejemplos de expresiones regulares:
Cualquier letra en minuscula [a-z] Entero ^(?:+|-)?d+$

Correo electrónico

SELECT REGEXP_SUBSTR('prueba@gmail.com','^[a-zA-Z0-9!#$%''\*\+-/=\?^_`\{|\}~]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$',1,1) FROM dual;

Nos devolverá el mail si es correcto.

Dirección IP
‘([[:digit:]]{1,3}).([[:digit:]]{1,3}).([[:digit:]]{1,3}).([[:digit:]]{1,3})’

URL
^(ht|f)tp(s?)://[0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*(:(0-9)*)*(/?)( [a-zA-Z0-9-.?,'/\+&%$#_]*)?$

Fecha
^d{1,2}/d{1,2}/d{2,4}$
(Por ejemplo 01/01/2007)
Hora ^(0[1-9]|1d|2[0-3]):([0-5]d):([0-5]d)$
(Por ejemplo 10:45:23)

Número tarjeta de crédito
^((67d{2})|(4d{3})|(5[1-5]d{2})|(6011))(-?s?d{4}){3}|(3[4,7]) d{2}-?s?d{6}-?s?d{5}$

Número teléfono
^[0-9]{2,3}-? ?[0-9]{6,7}$

Código postal
^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$

Certificado Identificación Fiscal
^(X(-|.)?0?d{7}(-|.)?[A-Z]|[A-Z](-|.)?d{7}(-|.)? [0-9A-Z]|d{8}(-|.)?[A-Z])$

REGEXP_REPLACE (cadena, expresiones regulares, sustituir por, la posición, la aparición, modo).
Devuelve la cadena de origen con una o todas las expresiones regulares reemplazadas.
Si se especifica un número positivo para la aparición se sustituye sólo esa aparición.
Si se especifica cero o se omite el parámetro, todas son reemplazadas.
Los últimos tres parámetros son opcionales.

SELECT REGEXP_REPLACE (columa, 'expresion', 'reemplazarpor') FROM mitabla;
resultado: = REGEXP_REPLACE (cadena, 'expresion',' reemplazo ', 1, 0,'i');
 
SELECT
   REGEXP_REPLACE('91.356.71.81', '([[:digit:]]{2})\.([[:digit:]]{3})\.([[:digit:]]{2})\.([[:digit:]]{2})', '(\1) \2-\3-\4') "REGEXP_REPLACE"
FROM dual;  2    3
 
REGEXP_REPLACE
--------------
(91) 356-71-81
 
SELECT REGEXP_REPLACE('H1234 H4321 H2345','(.*) (.*) (.*)','\3, \2 \1')FROM dual;
 
REGEXP_REPLACE('H1
------------------
H2345, H4321 H1234

REGEXP_INSTR (de origen, expresiones regulares, la posición desde que empezaría a buscar, frecuencia, return_option, modos) Esta función permite localizar la ubicación de partida de una subcadena (expresión regular) dentro de una cadena. Esta función tiene los mismos parámetros que REGEXP_SUBSTR, más el return_option. Los últimos 4 parámetros son opcionales.

Establecer return_option a cero o se omite el parámetro para obtener la posición del primer carácter en el partido. Póngalo en una para obtener la posición del primer carácter después del partido. El primer carácter de la cadena tiene la posición 1. REGEXP_INSTR devuelve cero si la cadena no se puede encontrar.

SELECT REGEXP_INSTR (mycolumn, 'regexp', 1, 1, 0, 'i') FROM mitabla;

REGEXP_COUNT (A partir de la 11g)
devuelve el número de veces que el patrón de búsqueda aparece en cadena de origen.

SQL&gt; SELECT REGEXP_COUNT ('123 123 123 123 ', '123', 1, 'i') de la doble;
 
 REGEXP_COUNT ('123123123123 ', '123', una 'I')
 ----------------------------------------
                                        4
 Una fila seleccionada.
 
 SQL&gt; SELECT REGEXP_COUNT ('123 123 123 123 ', '123', 9 'i') de la doble;
 
 REGEXP_COUNT ('123123123123 ', '123', 9 'I')
 ----------------------------------------
                                        2
 
 Una fila seleccionada.

Estos son los parámetros que podéis utilizar para el modo (última posición).

i: case insensitive
c: case sensitive
n: Donde (.) se corresponde con el salto de linea.
m: Indicamos que el string tiene varias lineas.

Leer más