El primeros nos ensamblan cubrirán se llaman un equijoin, también llamado un interno ensamblan. Aquí es donde una columna (o las columnas múltiples) en dos o más tablas empareja. Por nuestro ejemplo:
SELECT emp.ename, dept.dname
FROM emp JOIN dept
ON emp.deptno = dept.deptno
/
Qué este selecto dice es seleccionar la columna del ename de la tabla del emp junto con la columna del dname en la tabla del departamento. Ensamblar el emp y el departamento comparando las columnas del deptno en cada uno para la igualdad.
Puedo pensar en por lo menos tres otras maneras de escribir esta pregunta en Oracle, pero creo que ésta es la manera más clara y más intuitiva de hacer tan. Puedes también ver la pregunta antedicha escrita como esto:
SELECT emp.ename, dept.dname
FROM emp INNER JOIN dept
ON emp.deptno = dept.deptno
/
Oracle omite automáticamente el JOIN a INNER para no requerir la palabra clave INNNER. Son la misma pregunta, aunque. Apenas prefiero no mecanografiar la palabra clave INNER.
Y cómo limitamos esto apenas al departamento de las SALES:
SELECT emp.ename, dept.dname
FROM emp JOIN dept
ON emp.deptno = dept.deptno
WHERE dept.dname = 'SALES'
/
Esto está consiguiendo útil ahora. La autorización, nos dejó volver a todos los empleados en las OPERATIONS del departamento.
SELECT emp.ename, dept.dname
FROM emp JOIN dept
ON emp.deptno = dept.deptno
WHERE dept.dname = 'OPERATIONS'
/
Uh, oh. No conseguimos ninguna fila vuelta. Si nos referimos de nuevo a nuestra pregunta anterior, podemos ver que hay un dname de operaciones, pero no tenemos ningún empleado en ese departamento. ¿Cómo podemos conseguir detrás un expediente con el dname? Necesitamos un OUTER JOIN. Un externo ensambla dice Oracle volver las filas a la izquierda o derecho (de la cláusula del JOIN) aunque no hay filas.
SELECT emp.ename, dept.dname
FROM emp RIGHT OUTER JOIN dept
ON emp.deptno = dept.deptno
WHERE dept.dname = 'OPERATIONS'
/
Notan que agregué la palabra clave RIGHT OUTER a la cláusula del JOIN. Eso dice que la vuelta las filas a la JOIN (en este caso DEPT) aunque allí no es ninguna fila a la izquierda (en este caso EMP).
Podríamos reescribir la pregunta como tal:
SELECT dept.dname, emp.ename
FROM dept LEFT OUTER JOIN emp
ON dept.deptno = emp.deptno
WHERE dept.dname = 'OPERATIONS'
/
En este caso, pusimos el DEPT a la izquierda y utilizamos un LEFT OUTER ensamblamos para conseguir los mismos resultados.
Saturday, September 29, 2007
El SQL básico ensambla
Sunday, September 23, 2007
¿Cuál es un tipo de datos VARCHAR2?
VARCHAR2
VARCHAR2 es la secuencia del workhorse mecanografía adentro la base de datos de Oracle. VARCHAR2 es una secuencia de la longitud variable que debe tenerlo es longitud máxima declarada antes de usar. En Oracle 10g, una columna VARCHAR2 puede ser hasta 4000 octetos y puede ser hasta 32767 octetos en un programa de PL/SQL.
VARCHAR2 puede almacenar cualquier tipo de datos no-binarios. Dependiendo de la lengua definida en la base de datos (doble o multibyte), el número real de caracteres puede ser menos que el número de octetos. Por ejemplo, si la lengua requiere tres octetos por carácter, puedes almacenar más serías 32767 divididos por 3 caracteres.
Para declarar un VARCHAR2, puedes especificar el número de octetos o el número de caracteres. Especificar el número de caracteres si utilizas un juego de caracteres del multi-octeto. Si no, especificar los octetos.
Un declaración parece esto: VARCHAR2 (30) que declararían una secuencia de 30 octetos y son equivalentes a VARCHAR2 (BYTE 30). Declarar una cadena de caracteres 30, utilizar: VARCHAR2 (CHAR 30). En el juego de caracteres utilizo, VARCHAR2 (30), VARCHAR2 (BYTE 30) y VARCHAR2 (CHAR 30) almacenará exactamente el mismo número de caracteres.
En mis bases de datos, utilizo VARCHAR2 casi exclusivamente. La única vez que no utilizo VARCHAR2 es si necesito una secuencia grande (opinión para los documentos y tales) cuando utilizaré un CLOB. Cubriré CLOBs en el futuro.
Si necesito una variable de PL/SQL que sea más grande de 4000 octetos, sin embargo declararé a veces un LONG. UN PL/SQL LONG es sinónimo con VARCHAR2 (32760). No utilizo deseo en tablas mientras que CLOBs está mucho mejor. UN LONG en una tabla no es sinónimo con VARCHAR2 en todos.
Posted by
LewisC
at
9:37 AM
0
comments
¿Cuál es Oracle?
¿Conjeturo que la primera pregunta está realmente, “cuál es una base de datos”? Una base de datos es una recogida de datos organizada. Los datos pueden ser textuales, como datos de la orden o del inventario, o pueden ser los cuadros, los programas o todo lo demás que se pueden almacenar en una computadora en forma binaria.
Una base de datos emparentada almacena los datos bajo la forma de tablas y columnas. Una tabla es la categoría de datos, como empleado, y las columnas son información sobre la categoría, como nombre o la dirección.
Algunas bases de datos tienen sistemas mínimos de la característica y almacenan solamente datos, mientras que otras incluyen lenguajes de programación, instalaciones y utilidades para apoyar usos del empresa-nivel como ERP y el almacenamiento de los datos. Oracle es la base de datos #1 y tiene la característica más avanzada fijada.
Oracle se compone de un sistema de procesos que funcionan en tu sistema operativo. Estos procesos manejan cómo se almacenan los datos y cómo están alcanzados. Cubriré estos procesos detalladamente en el futuro; pero para ahora nosotros apenas necesitamos entender que Oracle sea un programa que está funcionando en el fondo, está manteniendo tus datos para ti y está calculando hacia fuera donde debe ir en tu impulsión dura.
En casi todas las bases de datos emparentadas, los datos están alcanzados con el SQL, o el lenguaje de interrogación estructurado, y Oracle no es ninguna excepción. El SQL permite que SELECT tus datos, nuevos expedientes del INSERT, que UPDATE expedientes existentes y que DELETE expedientes que deseas conseguir librado de. El SQL se puede encajar en otras idiomas o puedes funcionar las escrituras del SQL directamente contra la base de datos.
PL/SQL es la extensión de lengua procesal al SQL. PL/SQL es un lenguaje de programación como C, Java o PASCAL. En el mundo de Oracle, no hay manera mejor de tener acceso a tus datos por dentro de un programa. El SQL se puede encajar nativo en programas de PL/SQL. Utilizaré el SQL y PL/SQL muy pesadamente en mis artículos futuros.
PL/SQL es una lengua característica-rica engranada hacia usos de la base de datos que se convierten. PL/SQL es la lengua procesal de la base de datos, pero es también la lengua procesal para la mayor parte de las herramientas de Oracle. Los programas que funcionan dentro de la base de datos se llaman los procedimientos almacenados. Estos procedimientos almacenados son casi siempre PL/SQL, pero se pueden escribir en Java.
Posted by
LewisC
at
9:32 AM
0
comments
Labels: definición, oracle, sql
Friday, September 14, 2007
Introducción a SQL básico, parte 1
SQL, SEQUEL pronunciada, es la lengua de estándar para tener acceso a bases de datos emparentadas. SQL es una abreviatura para el lenguaje de interrogación estructurado. No dejar el hecho de que es un susto de la lengua tú. Usar su funcionalidad básica es muy simple.
Aun cuando SQL es un estándar, cada vendedor tiene sus propias extensiones y limitaciones. Oracle no es ninguna excepción. Hasta Oracle 9i, Oracle no apoyó estándar ensambla el sintaxis que fue apoyado por las bases de datos tan simples como MS-Access. Sin embargo, Oracle ha proporcionado siempre las extensiones que te hicieron una plataforma muy robusta para todo del acceso de usuario general a las preguntas ad hoc a los usos en tiempo real del alto rendimiento al almacenamiento de los datos.
En este artículo, cubriré el SQL básico. Las preguntas en este artículo funcionarán contra la mayoría de la cualquier base de datos de Oracle. Los objetos contra los cuales estamos preguntando diferencian entre los vendedores de la base de datos. Seguiré este artículo pronto con un artículo que describe más funcionalidad avanzada del SQL y cómo esa funcionalidad diferencia entre Oracle, MySQL y PostgreSQL.
El sintaxis más básico del SQL comienza con una cláusula y una a SELECTAS de la cláusula. Una cláusula SELECT dice a base de datos LO QUE deseas seleccionar. A FROM la cláusula dice a base de datos dónde encontrar que los datos.
Funcionar SQL*Plus (descrito en el artículo que mencioné arriba), conexión como cualquier usuario tienes disponible y entras:
SELECT table_name
FROM all_tables;
Cuando funciono mi pregunta, consigo una lista de las tablas seguidas por el texto “113 filas seleccionadas.”. La cláusula SELECT es TABLE_NAME y FROM cláusula son los all_tables. El punto y coma en el extremo dice a Oracle que hayas terminado tu comando. DEBES incorporar un punto y coma o una raya vertical antes de que Oracle te procese comando.
Esto era un comando muy útil pero podría ser hecho más útil. La lista de tablas era justa que, una lista. Si buscáramos una tabla específica, sería duro con una lista desordenada como eso. Intentemos poner una cierta orden a ella.
Entrar:
SELECT table_name
FROM all_tables
ORDER BY table_name
/
La autorización, allí es tres diferencias aquí. No hay punto y coma sino que hay una raya vertical, “/”. La raya vertical también dice a Oracle que hayas terminado un comando. La raya vertical debe aparecer la columna 1 del ion en una línea por sí mismo. Un punto y coma puede seguir dondequiera mientras no haya líneas en blanco entre él y el comando.
El tipo raya vertical en una línea por sí mismo y Oracle ejecutará nuevamente el comando anterior. Ahora intentarlo.
Autorización, también agregamos una ORDER BY cláusula a nuestro comando. La ORDER BY dice Oracle a, extrañamente bastante, pide el sistema del resultado. ¿Qué pidió cerca? TABLE_NAME.
Ahora que es mucho más útil. Puedes enrollar a través de la lista y encontrar una tabla específica. La voluta a través de ella ahora y encuentra la tabla, DUAL. Si no ves esta tabla, algo no se configura correctamente en tu base de datos ni se configura correctamente con tu usuario. DUAL es una tabla especial proporciona por Oracle. Debe siempre tener una fila y solamente tener una columna. Esa columna, DUMMY, debe siempre tener el valor “X”.
Entrar:
SELECT table_name
FROM all_tables
WHERE table_name = 'DUAL'
/
Debes conseguir solamente una sola fila detrás. Si consigues más que una sola fila, debes tener tablas DUALES múltiples en tu base de datos. Agreguemos una columna nueva a nuestro selecto:
SELECT table_name
FROM all_tables
WHERE table_name = 'DUAL'
AND OWNER = 'SYS'
/
SYS es un usuario muy especial. SYS posee la mayor parte de los objetos subyacentes en una base de datos.
Como puedes ver WHERE la cláusula limita los datos tú selecto. La oirás/lees te referiste como donde cláusula, línea del límite, línea de la restricción, etc.
Tan cómo sabía que la opinión de ALL_TABLES tenía el OWNER de la columna en ella.
Entrar:
DESC DUAL
El comando de DESC es un comando del SQL*Plus, no un comando del SQL. El comando del SQL*Plus y del SQL no es caso sensible. Ése es tú puede entrarlos en como mayúsculo, minúscula o cualquier combinación del caso. El texto en las cotizaciones, llamadas los literales, es caso sensible. El entrar del intento:
SELECT table_name
FROM all_tables
WHERE table_name = 'Dual'
/
No debes conseguir ninguna fila. ALL_TABLES, y la mayoría de las otras opiniones del diccionario de los datos, siempre datos del almacén en mayúscula. Hay una manera de crear objetos en un caso más bajo y mezclado pero considero que una tan mala práctica que no quisiera que fuera el que está para demostrarte cómo. ; -)
SQL proporciona las funciones útiles que puedes ejecutar en tu seleccionas para modificar datos. Suponer que deseamos encontrar el tercer carácter del nombre de la tabla para cada tabla. Entraríamos:
SELECT table_name, substr(table_name, 3, 1)
FROM all_tables
/
Puedes ver que hay dos columnas en ti lista de la vuelta. SUBSTR es una función del SQL que significa subsecuencia. Básicamente, vuelve un subconjunto del valor en una secuencia.
Si deseaste ver si un valor está en una secuencia podrías entrar:
SELECT table_name, instr(table_name, 'A')
FROM all_tables
/
INSTR es una función que encuentra la localización de una subsecuencia en una secuencia. La llamada de función antedicha dice vuelta la localización de la subsecuencia A para el table_name de la columna de los all_tables de la tabla. Si la columna nueva es un 0, ese nombre de la tabla no contiene un A. Si es un número más arriba de 0, que la primera localización en el nombre de la tabla del carácter A.
Y ése es SQL básico en una cáscara de nuez. Todo este sintaxis trabajará en la mayoría de la cualquier base de datos pero solamente Oracle tiene la tabla DUAL. Los diccionarios de los datos también varían entre las bases de datos. De una manera disimulada, también te he introducido a conceptos más avanzados de Oracle como la tabla DUAL y un diccionario de los datos.
Cubrimos hoy el SELECT, FROM, WHERE ORDER BY cláusulas del SQL. SELECT es CUÁL, FROM la FUENTE, WHERE está el LÍMITE y la ORDER BY es la ORDEN DE. Con estas cuatro cláusulas, puedes tener acceso apenas sobre cualquier base de datos emparentada en existencia.
Estoy trabajando en tres artículos para seguir éste. Un artículo demostrará cómo ejecutar las preguntas equivalentes presentadas en este artículo contra MySQL y PostgreSQL (y de tal modo describir sus diccionarios de los datos), una cubierta SQL avanzado del artículo (y cómo diferencian las otras bases de datos) y un artículo sobre tipos de datos.
Los tipos de datos son la base de cualquier base de datos. Oracle, MySQL y PostgreSQL ofrecen tipos de datos muy ricos. MySQL hace las cosas un pedacito complicado que PostgreSQL o Oracle. Explicaré lo que significo en el artículo próximo.
Puesto que he descrito los tres artículos que estoy trabajando actualmente encendido, fijar por favor a la discusión sobre este artículo que quisieras ver primero.
Posted by
LewisC
at
3:02 PM
3
comments
Labels: aprender el oráculo, oracle, sql
Saturday, September 8, 2007
Aprender PL/SQL: Procedimientos y funciones
Procedimientos CONTRA funciones
Los procedimientos son tradicionalmente el workhorse del mundo de la codificación y las funciones son tradicionalmente los pedazos más pequeños, más específicos del código. Generalmente si necesitas poner al día la carta de cuentas, escribirías un procedimiento. Si necesitas recuperar el código de la organización para una cuenta particular de GL, escribirías una función.
Aquí están algunas más diferencias entre un procedimiento y una función:
- Una función DEBE volver un valor
- Un procedimiento no puede volver un valor
- Los procedimientos y las funciones pueden ambos datos de vuelta en IN y IN OUT parámetros
- La declaración de vuelta en una función vuelve control al programa que llama y vuelve los resultados de la función
- La declaración de vuelta de un procedimiento vuelve control al programa que llama y no puede volver un valor
- Las funciones se pueden llamar de SQL, procedimiento no pueden
- Las funciones se consideran las expresiones, procedimiento no son
Parámetros
Los programas nombrados de PL/SQL (los procedimientos y las funciones) pueden tomar parámetros. Los parámetros se nombran las variables que están disponibles para un programa y que modifican comportamiento y/o datos del programa. Los parámetros son opcionales en procedimientos y funciones.
Se declaran los parámetros cuando un procedimiento o una función se declara y se declara entre paréntesis abiertos y cercanos (()).
Los parámetros pueden ser nombrados cualquier cosa que sigue Oracle que nombra estándares. Guardarlos bajo 30 caracteres, no deben comenzar con una letra y contener ningún espacio. Las reglas allí adicionales pero ésas son las que se violan lo más comúnmente posible.
Hay tres tipos de parámetro: IN, OUT y IN OUT.
IN parámetro se utiliza una entrada solamente. IN parámetro no puede ser cambiado por el programa llamado.
Un parámetro de la OUT es inicialmente NULL. El programa asigna a parámetro un valor y ese valor se vuelve al programa que llama.
IN OUT parámetro puede o no puede tener un valor inicial. Ese valor inicial se puede o no se puede modificar por el programa llamado. Cualquier cambio realizado al parámetro se vuelve al programa que llama.
Los parámetros se declaran con los tipos de datos pero sin el tipo de datos longitud o precisión. Eso significa que un parámetro se puede declarar como VARCHAR2 pero no será declarado con un componente de la longitud (VARCHAR2 (30) no sería válido).
Los parámetros se pueden también asignar un valor prefijado. Puedes o utilizar al operador de asignación (: =) o utilizar la palabra clave del DEFAULT. Cuando un parámetro tiene un valor prefijado, no necesitas incluir ese parámetro en la llamada. DEBES incluir siempre IN OUT y OUT los parámetros.
Declaraciones del parámetro de la muestra:
(
parameter_1 IN VARCHAR2 := 'ABC',
parameter_2 IN VARCHAR2 DEFAULT 'ABC',
parameter_3 IN OUT NUMBER,
parameters_can_be_named_anything OUT DATE
)
Referencia de parámetro
Los programas que llaman pueden referir a parámetros positionally o por la notación nombrada. Se considera una mejor práctica de referir a parámetros vía la notación nombrada. Casi nadie hace esto constantemente sin embargo (mismo incluido).
La notación posicional refiere a enumerar los parámetros por la posición que están declarados. Usando el ejemplo arriba, podríamos positionally referir a los parámetros como:
(“def”, “ghi”, v_number_variable, v_date_variable)
Para la notación nombrada, utilizarías el nombre real del parámetro. Esto es muy práctico para las listas grandes del parámetro y para esas listas del parámetro que tengan un montón de valores prefijados. Al usar la notación nombrada, los parámetros no tienen que ser enumerados en la orden del declaración.
(=> parameter_3 v_number_variable, parameter_1 => “def”, => v_date_variable v_date_variable)
Procedimientos
El procedimiento es un programa que realiza una acción y no vuelve un valor (afuera de EN HACIA FUERA y HACIA FUERA los parámetros).
Se declara un procedimiento como:
CREATE OR REPLACE PROCEDURE
([any parameters])
AS
[declare variables]
BEGIN
[execute code]
[handle exceptions]
END;
Un ejemplo simple del procedimiento de PL/SQL:
CREATE OR REPLACE PROCEDURE my_first_proc
(p_name IN VARCHAR2 := 'Lewis',
p_address IN VARCHAR2 := '123 Mockingbird Ln',
p_an_in_out_parameter IN OUT NUMBER,
p_an_out_parameter OUT DATE )
AS
v_a_variable VARCHAR2(30);
BEGIN
IF p_name = 'Lewis'
THEN
DBMS_OUTPUT.PUT_LINE( p_name || ': ' ||
p_address );
END IF;
v_a_variable := 99;
p_an_in_out_parameter := v_a_variable;
p_an_out_parameter := SYSDATE;
END;
Llamarías este procedimiento como:
DECLARE
v_employee VARCHAR2(30) := 'BillyBob';
v_number NUMBER := 22;
v_date DATE;
BEGIN
my_first_proc(
p_name => v_employee,
p_an_in_out_parameter => v_number,
p_an_out_parameter => v_date );
DBMS_OUTPUT.PUT_LINE(
v_employee || ', ' ||
to_Char(v_number) || ', ' ||
to_char(v_date) );
my_first_proc(
p_an_in_out_parameter => v_number,
p_an_out_parameter => v_date );
DBMS_OUTPUT.PUT_LINE(
v_employee || ', ' ||
to_Char(v_number) || ', ' ||
to_char(v_date) );
END;
Funciones
La función es un programa que pudo realizar una acción y vuelve un valor.
Se declara una función como:
CREATE OR REPLACE FUNCTION
([any parameters])
RETURN
AS
[declare variables]
BEGIN
[execute code]
[handle exceptions]
RETURN [variable or expression]
END;
Podemos convertir el procedimiento antedicho a una función y hacer que vuelve la variable que declara:
CREATE OR REPLACE FUNCTION my_first_func
(p_name IN VARCHAR2 := 'Lewis',
p_address IN VARCHAR2 := '123 Mockingbird Ln',
p_an_in_out_parameter IN OUT NUMBER,
p_an_out_parameter OUT DATE )
RETURN VARCHAR2
AS
v_a_variable VARCHAR2(30);
BEGIN
IF p_name = 'Lewis'
THEN
RETURN -1;
END IF;
v_a_variable := 99;
p_an_in_out_parameter := v_a_variable;
p_an_out_parameter := SYSDATE;
RETURN v_a_variable;
END;
Llamarías esta función como:
DECLARE
v_employee VARCHAR2(30) := 'BillyBob';
v_number NUMBER := 22;
v_date DATE;
v_variable VARCHAR2(30);
BEGIN
v_variable :=
my_first_func(
p_name => v_employee,
p_an_in_out_parameter => v_number,
p_an_out_parameter => v_date );
DBMS_OUTPUT.PUT_LINE(
v_variable || ', ' ||
v_employee || ', ' ||
to_Char(v_number) || ', ' ||
to_char(v_date) );
v_variable :=
my_first_func(
p_an_in_out_parameter => v_number,
p_an_out_parameter => v_date );
DBMS_OUTPUT.PUT_LINE(
v_variable || ', ' ||
v_employee || ', ' ||
to_Char(v_number) || ', ' ||
to_char(v_date) );
END;
Posted by
LewisC
at
6:43 AM
6
comments
Labels: aprender el oráculo, código, desarrollo, función, pl/sql, procedimiento, programando, sql