Bases de Datos Relacionales

29
Bases de Datos Relacionales Preparó: Ismael Castañeda Fuentes Fuentes: Manuales Sybase Manuales SQL Server Manuales Oracle BATCHS

description

Bases de Datos Relacionales. BATCHS. Preparó: Ismael Castañeda Fuentes Fuentes:Manuales Sybase Manuales SQL Server Manuales Oracle. Ambiente de ejecución. El código se puede ejecutar en: Cliente Servidor Ventajas de programar en el lado cliente - PowerPoint PPT Presentation

Transcript of Bases de Datos Relacionales

Page 1: Bases  de Datos Relacionales

Bases de Datos Relacionales

Preparó: Ismael Castañeda FuentesFuentes: Manuales Sybase

Manuales SQL ServerManuales Oracle

BATCHS

Page 2: Bases  de Datos Relacionales

Ambiente de ejecución

• El código se puede ejecutar en:– Cliente– Servidor

• Ventajas de programar en el lado cliente– Atiende usuarios finales con diferentes necesidades– Evita tráfico en la red– Se distribuye una parte del procesamiento– Puede facilitar la interacción del usuario

• Ventajas de programar en el lado servidor– Se tiene concentración de los recursos– Uniformisa la aplicación de las reglas del negocio– Se puede actualizar más fácilmente el código

Page 3: Bases  de Datos Relacionales

Batch

• Una o más sentencias enviadas y ejecutadas como una sola

• Ejemplo:

delete saleswhere stor_id = "5023"and ord_num = "AB-123-DEF-425-1Z3"

delete salesdetailwhere stor_id = "5023"and ord_num = "AB-123-DEF-425-1Z3"

select * from sales where stor_id = "5023"

select * from salesdetail where stor_id = "5023"

go

Page 4: Bases  de Datos Relacionales

Restriciones de los batch

• Esta sentencias deben tener su propio batch:– create default– create rule– create procedure– create trigger– declare cursor

• No se puede borrar y recrear un objeto en el mismo batch

• sentencia use

• No se puede asignar una regla o default a una columna e insertarle valores en el mismo batch

Page 5: Bases  de Datos Relacionales

Comentarios

• Porción de código ignorado por el servidor

• Usados para documentar

• Dos formas: -- comentario hasta el final de una línea /* comentario multilínea */

Page 6: Bases  de Datos Relacionales

Variables locales

• Variable local: nombre de una posición de memoria para almacenar un valor

• Uso típico de las variables locales– Para facilitar el uso repetido de valores constantes– Para ejecutar bifurcamiento en código SQL– Para capturar mensajes que contienen información variable– Para intercambio de información con stored procedures– Para evitar el uso de subquerys

Page 7: Bases  de Datos Relacionales

Variables locales - Asignación con select y expresiones

• Sintaxis simplificada:select variable_name = expression

[, variable_name = expression ...]

• Ejemplos:declare @number int,

@copy int,@sum int

select @number = 10

select @copy = @number,@sum = @number + 100

• Si select no retorna valores, la variable no cambia su valor

Page 8: Bases  de Datos Relacionales

Variables locales - Asignación con select y valores de tabla

• Sintaxis simplificada:select variable_name = column_name

from table_name[where condition]

• Ejemplos:declare @AD_id char(11)select @AD_id = au_id

from authorswhere au_fname = "Ann" and au_lname = "Dull"

• Si el select retorna múltiples valores, solamente toma el último

Page 9: Bases  de Datos Relacionales

Variables locales - Asignación con update

• Sintaxis simplificada:update table_name

set {column_name | variable_name } = expression [, {column_name | variable_name } = expression ... ][where condition]

• Ejemplos:declare @pub_name varchar(40)update publishers

set city = "Escanaba",state = "MI",@pub_name = pub_name

where pub_id = "0736"

• Si update modifica múltiples filas, solamente el último asignado permanece en la variable

Page 10: Bases  de Datos Relacionales

Variables locales – Declaración - Ejemplo

• Las variables se deben declarar antes de usarlas

• Ejemplo:select pub_id

from publishersselect @myvar = total_sales

from titleswhere title_id = "BU2075"

select @myvar

Server Message: Number 137, Severity 15Line 3:Must declare variable '@myvar'.

Page 11: Bases  de Datos Relacionales

Variables locales – Concordancia - Ejemplo

• Los valores de las variables deben de concordar con el tipo de dato de la variable

• Ejemplo:declare @myvariable int

select @myvariable = titlefrom titleswhere title_id = "BU2075"

select @myvariable

Server Message: Number 257, Severity 16Line 2:Implicit conversion from datatype 'VARCHAR' to'INT' is not allowed. Use the CONVERT function torun this query.

Page 12: Bases  de Datos Relacionales

Variables locales – Retorno de un select - Ejemplo

• Si el select no retorna valores, la variable no cambia

• Ejemplo:declare @value int

select @value = total_sales from titleswhere title_id = "BU2075"

select @value as "BU2075 sales"

select @value = total_sales from titleswhere title_id = "BU11" -- should be "BU1111"

select @value as "BU1111 sales"

Primer query: Segundo query:BU2075 sales BU1111 sales------------ ------------

18722 18722

Page 13: Bases  de Datos Relacionales

Variables locales - Alcance -Ejemplo

• Las variables locales se borran al terminar el batch que las crea

-- Declare a local variable:declare @pub_var char(4)

-- Assign the variable a value from a table:select @pub_var = pub_id

from pubs2..publisherswhere pub_name = "New Age Books"

-- View the variable’s value:select @pub_var

--- Use the variable in a select statement:select title_id, title, pub_id

from pubs2..titleswhere pub_id = @pub_var

-- Execute the batch. (Users of SQL Advantage do -- not need to enter "go" to complete this step):

go

Page 14: Bases  de Datos Relacionales

Variables globales

• Variable global: nombre de una posición de memoria para almacenar un valor definido y mantenido por el servidor

Page 15: Bases  de Datos Relacionales

Variables globales - Ejemplo

• Ejemplo_1:delete from titleswhere type = "popular_comp"select @@rowcount

------3

• Ejemplo_2:delete from titleswhere type = "popular_comp"select @@error

------0

Page 16: Bases  de Datos Relacionales

Variables globales – Ejemplo con @@error

• Ejemplo:-- The word "from" is misplaceddelete titles from

where type = "psychology"

Server Message: Number 156, Severity 15Line 4:Incorrect syntax near the keyword 'where'.

select @@error

------ 156

Page 17: Bases  de Datos Relacionales

Variables globales – Ejemplo con @@error

• Crear una tabla:select * into mytitles

from pubs2..titles

• Intentar borrar una tabla inexistente @@error:delete from no_tableselect @@error

• Ejecutar un delete con una condición que nunca se cumple:delete from mytitles

where 1 = 2select @@error

• ¿El segundo delete generate un error? ¿Por qué o por qué no?

• Borrar los objetos de bases de datos creados:drop table mytitles

Page 18: Bases  de Datos Relacionales

Sentencias de control de flujo

• Por default los servidores ejecutan las sentencias en el orden en que ellas aparecen• Las siguientes son sentencias de control de flujo:

– if...else– begin...end– if exists– while– break– continue– return

Page 19: Bases  de Datos Relacionales

if...else

• Sintaxis simplificada:if condition

block_to_execute_when_condition_is_true[ else

block_to_execute_when_condition_is_false ]

• Ejemplo:delete from titles

where type = "mod_cook"if @@error <> 0

select "An error has occurred!"else

select "The delete was successful."

Page 20: Bases  de Datos Relacionales

Condiciones anidadas

• Ejemplo:delete from titles where type = "mod_cook"if @@rowcount = 0

select "No rows were deleted."else

if @@rowcount = 1select "One row was deleted."

elseselect "Multiple rows were deleted."

Page 21: Bases  de Datos Relacionales

begin...end

• Sintaxis:begin statement statement ...end

• Ejemplo:...if @temp_id = "TC4203"

begin select @temp_type = "trad_cook" delete titles where type = "trad_cook"end

elsebegin select "Title has already been deleted"end

Page 22: Bases  de Datos Relacionales

if exists

• Sintaxis simplificada:if [ not ] exists ( select_statement )code_to_execute_when_condition_is_true[ elsecode_to_execute_when_condition_is_false ]

• Ejemplo_1:if exists (select * from titles where price > $50.00)update titles set price = price * $0.90elseselect "All titles priced under $50.00“

• Ejemplo_2:if exists (select * from sysobjectswhere name = "vw_utah_authors"and type = "V")drop view vw_utah_authorsgocreate view vw_utah_authorsasselect * from authorswhere state = "UT"with check option

Page 23: Bases  de Datos Relacionales

Sentencias if

• Ejemplo:if (select avg(price) from pubs2..titles) > $25

select "These books are expensive."else

select "These books are a bargain."

• Ejemplo :drop table mysales

• Ejemplo :if exists (select * from sysobjects where name = "mysales“ and type = "U")

drop table mysales

Page 24: Bases  de Datos Relacionales

while• Sintaxis:

while conditionblock_to_execute

• Ejemplo_1:while (select avg(price) from titles) < $40

beginupdate titlesset price = price + $2

end

• Ejemplo_2:declare @price moneyselect @price = price

from titleswhere title_id = "PS1372"

while @price < $30begin

update titlesset price = price * $1.10where title_id = "PS1372"

end

-- The loop updates the price of PS1372, but-- never updates the value of @price. Because-- the loop condition is based on @price,-- execution of the loop would never terminate.

Page 25: Bases  de Datos Relacionales

break

• Ejemplo:-- While the average price is greater than-- $20, this loop cuts all prices in half.-- However, if the maximum price falls below-- $40, the loop is immediately terminated.

while (select avg(price) from titles) > $20begin update titles

set price = price / 2 if (select max(price) from titles) < $40

breakend

Page 26: Bases  de Datos Relacionales

continue

• Ejemplo:-- While @price is less than $20, this loop adds-- $1 to @price. If there are 5 or more titles-- at @price, it restarts the loop. Otherwise,-- it increases all books priced at @price by 10%....while @price < $20.00 begin

select @price = @price + $1.00if (select count(price) from titles where price = @price) >=

5 continueelse update titles set price = price * $1.10 where price =

@priceend

Page 27: Bases  de Datos Relacionales

return

• Ejemplo:-- @avg_price is declared and set to the average-- price in titles. If the average is less than-- $10, execution exits the entire batch.-- Otherwise, it continues execution.

declare @avg_price moneyselect @avg_price = avg(price) from titlesif @avg_price < $10

returnwhile @avg_price < $20

beginupdate titles set price = price * $0.95select @avg_price = avg(price) from titles

end

Page 28: Bases  de Datos Relacionales

Ciclos while• Ejemplo:

declare @x moneyselect @x = $0while @x < (select max(price) from pubs2..titles)

beginselect @x = @x + $1select "Titles less than $", @xselect price, title from pubs2..titles where price < @x

end

Page 29: Bases  de Datos Relacionales

select

• Sintaxis simplificada:select { "user_message" | variable_name | column_list }

• Ejemplo:select "The average price is too low."

select "The average price is ", @avg_price

select "The average price is ", avg(price) from titles

• Puede retornar texto, valores variables, y datos de tabla en cualquier combinación