Actualizar el grub si no reconoce windows

Hola a todos mis lectores. Desde hace bastante tiempo que no escribía una entrada. En el día de hoy voy a explicar que es lo que hay que hacer si cuando se instala una distribución GNU/Linux, el cargador de arranque Grub no reconoce Windows.

Lo primero que tendremos que hacer es abrir una terminal. A continuación escribir lo siguiente:

sudo update-grub2

Ya esta, con esto tendremos suficiente.

Saludos

Curso PL/SQL. Parte 1

En este curso de PL/SQL veremos desde que es PL/SQL hasta cosas complicadas que nos puedan surgir en cualquier momento, si sigues este curso hasta el final sabrás programar en PL/SQL.  Este curso lo hago teniendo en cuenta que la gente que lo mire ya sabe SQL y tiene conocimientos básicos de programación, si no es así este no es vuestro curso.

El camino puede ser al principio largo y tedioso, pero cuanto más vallamos avanzando más ganas tendrás de seguir.

TEMA 1. Introducción.

  1. ¿Qué es PL/SQL?
  2. Bloques PL/SQL: Anonimos y con Nombre.
  3. Entorno de Trabajo.
  4. Ámbito de Bloque.

1.1 ¿Qué es PL/SQL?

 
PL/SQL (Procedural Language/Structured Query Language) es un lenguaje de programación incrustado en Oracle.
PL/SQL soportara todas las consultas, ya que la manipulación de datos que se usa es la misma que en SQL, incluyendo nuevas características:
  • El manejo de variables.
  • Estructuras modulares.
  • Estructuras de control de flujo y toma de decisiones.
  • Control de excepciones.
El lenguaje PL/SQL está incorporado en:
  • Servidor de la base de datos.
  • Herramientas de Oracle (Forms, Reports, ...).
En un entorno de base de datos los programadores pueden construir bloques PL/SQL para utilizarlos como procedimientos o funciones, o bien pueden escribir estos bloques como parte de scripts SQL*Plus.



1.2 Bloques PL/SQL 

Los bloques en PL/SQL pueden ser de 2 tipos.
  • Bloques anónimos.
  • Bloques con Nombres.

La mayor diferencia entre unos y otros, es que los bloques anónimos no se almacenan en la base de datos, mientras que los bloques con nombre si se almacenan como objetos en la BD.

Para que se entienda de una forma mucho más sencilla, los bloques anónimos son los Main() de C y los bloques con nombre son las funciones.

Los bloques anónimos tienen la siguiente estructura. (lo que esta [] no es obligatorio).

Bloque anónimo.

[Declare]      
                        
[variables]   

BEGIN

[Exception]


END;


--------------------

La zona entre Declare y BEGIN es la zona declarativa, en otras palabras, es donde se declararán TODAS las variables que utilizaremos en el programa, si no tenemos variables, el Declare no hace falta ponerlo.

Entre el BEGIN y END es donde se pondrá todo el código de nuestro programa.

La zona de Exception para que se entienda rápido es un GOTO.

 Bloque con nombre.


Create or Replace Function <nombre>

[Zona declarativa]

BEGIN

[Zona ejecutiva]

[Exception]

END;


1.3. Entorno de trabajo (con bloques anónimos)

El entorno de trabajo es con ficheros externos en los que se crea el código fuente y luego es llamado desde la base de datos, estos ficheros pueden tener una extensión .txt o más frecuentemente .sql

Un ejemplo de código fuente que imprime por pantalla un "Zarpemos Nakamas".

SET SERVEROUTPUT ON

BEGIN

 DBMS_OUTPUT.PUT_LINE('Zarpemos Nakamas');

END;
/

Con esto ya tenemos hecho nuestro primer programa en PL/SQL, ahora lo que tenemos que hacer es ejecutarlo, para ello una de las formas (la que usaremos en este curso) será ejecutarlo desde SQL*Plus.

Para ejecutarlo tenemos que poner el SQL*Plus lo siguiente:

SQL> @<Ruta del archivo>

Esto ejecutara nuestro código PL/SQL.


1.4 Ámbito de Bloque.

En un principio dije que todas las variables de tienen que declarar en la zona de Declare, pero se pueden hacer más zonas de Declare a lo largo de el código PL/SQL, si abrimos un nuevo declare tendremos que poner su correspondiente BEGIN y END; por lo que las variables aunque tengan el mismo nombre si estan en declare distintos tendrán valores distintos. Ejemplo:

Declare

 X NUMBRE := 3;

BEGIN
    pintar x ----> 3

       Declare
             X NUMBER := 7;

       BEGIN

               pintar x -----> 7

        END;

pintar x ---> 3

END;


Explicación de los Join en SQL

Hola a todos, en la entrada de hoy explicare de una forma sencilla y eficaz que son los Join de tablas en SQL y cuales son los diferentes tipos.

Yo, al igual que muchos informáticos, mantengo una relación de Amor/Odio con SQL, ya que hay muchos conceptos que no están muy claros y uno de ellos era el de los Join, por eso como ya lo se quiero explicarlo de una forma sencilla, para que la gente que quiera aprender le cueste menos que a mi. Empecemos!!

Supongamos que tenemos las dos siguientes tablas. La tabla A está a la izquierda, y la tabla B está a la derecha. Las rellenaremos con cuatro registros cada una.

Ahora unamos estas dos tablas por el campo nombre de algunas formas distintas, y veamos si podemos obtener unas representaciones conceptuales con los ingeniosos diagramas de Venn.

Inner join sólo produce los registros que coinciden en las dos tablas A y B.

SELECT * FROM TablaA
INNER JOIN TablaB
ON TablaA.nombre = TablaB.nombre




Full outer join produce el conjunto de todos los registros en las tablas A y B, con registros coincidentes en ambos lados cuando sea posible. Si no hay coincidencia, el lado que falta contendrá null.

SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre














Left outer join produce el conjunto completo de registros de la tabla A, con los registros coincidentes (si están disponibles) en la tabla B. Si no hay coincidencia, el lado derecho contendrá null.

SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre


Para producir el conjunto de registros en la tabla A, pero no en la tabla B, usamos el mismo Left Outer Join, y luego excluimos los registros que no queremos del lado derecho mediante una cláusula Where.

 SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
WHERE TablaB.id IS NULL



Para producir el conjunto de registros únicos de la tabla A y la tabla B, usamos el mismo Full Outer Join, y luego excluimos los registros que no queremos de los dos lados mediante una cláusula Where.

SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
WHERE TablaA.id IS NULL
OR TablaB.id IS NULL



Espero que les guste la explicación y les sirva mucho.