{"id":419,"date":"2017-09-19T23:20:17","date_gmt":"2017-09-19T23:20:17","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=419"},"modified":"2020-07-17T21:40:16","modified_gmt":"2020-07-17T21:40:16","slug":"funciones-definidas-por-el-usuario-ejercicio","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=419","title":{"rendered":"Funciones definidas por el usuario &#8211; Ejercicio"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2017\/09\/ManualSQL_FDU_Ejercicio_D.png\" alt=\"\" class=\"wp-image-962\" width=\"253\" height=\"226\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Funciones definidas por el usuario FDU<\/strong><\/h2>\n\n\n\n<p>Las funciones definidas por el usuario permiten obtener resultados que las funciones propias de SQL Server no pueden mostrarnos, son de mucha utilidad para optimizar el trabajo de consultas con par\u00e1metros. Para mejor informaci\u00f3n ver <a href=\"http:\/\/www.manualsqlserver.com\/?p=335\">Funciones definidas por el usuario<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Se pueden usar en ocasiones para obtener el mismo resultado <a href=\"http:\/\/www.manualsqlserver.com\/?p=215\">Joins<\/a> y <a href=\"http:\/\/www.manualsqlserver.com\/?p=219\">Subconsultas<\/a>.<\/p>\n\n\n\n<p>Las Funciones Definidas por el usuario son de DOS TIPOS:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Las que retornan UN VALOR \u2013 InLine,se utilizan en otras instrucciones<\/li><li>Las que retornan UNA TABLA<\/li><\/ol>\n\n\n\n<p><strong>Para crear las que devuelven un valor.<br><\/strong>Create function Esquema.NombreFuncion([Par\u00e1metros]) Returns TipoDato<br>As<br>Begin<br>Instrucciones\u2026.<br>Return ValorRetornado<br>End<br>go<\/p>\n\n\n\n<p><strong>Para crear las FDU que retornan UNA TABLA<br><\/strong>Create function Esquema.NombreFuncion([Par\u00e1metros]) Returns Table<br>As<br>Return (Select\u2026.)<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n\n<p>&#8212; Usando Northwind<\/p>\n\n\n\n<p>use Northwind<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Crear una funci\u00f3n para retornar el total de Categor\u00edas<\/strong><\/p>\n\n\n\n<p>Create function dbo.fCategoriasCuenta() Returns Int<\/p>\n\n\n\n<p>As<\/p>\n\n\n\n<p>Begin<\/p>\n\n\n\n<p>Declare @CantidadCategorias int<\/p>\n\n\n\n<p>Select @CantidadCategorias=count(*) from categories<\/p>\n\n\n\n<p>Return @CantidadCategorias<\/p>\n\n\n\n<p>End<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>&#8212; Prueba:&nbsp;<\/strong><\/p>\n\n\n\n<p>Select &#8216;Existen: &#8216; + Ltrim(Str(dbo.fCategoriasCuenta()))+ &#8216; categor\u00edas&#8217;<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p>&#8212; Reportar el total de art\u00edculos en stock de categoria 1<\/p>\n\n\n\n<p>select sum(UnitsInStock) from products where categoryid=1<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Reportar el total de art\u00edculos en stock de categoria 5<\/strong><\/p>\n\n\n\n<p>select sum(UnitsInStock) from products where categoryid=5<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Crear una funci\u00f3n que reporte el total de art\u00edculos en Stock de cualquier categor\u00eda<\/strong><\/p>\n\n\n\n<p>Create function dbo.fnStockxCategoria(@CodigoCategoria int) Returns Int<\/p>\n\n\n\n<p>As<\/p>\n\n\n\n<p>Begin<\/p>\n\n\n\n<p>Declare @TotalStock int<\/p>\n\n\n\n<p>Select @TotalStock = sum(UnitsInStock) from products where CategoryId = @CodigoCategoria<\/p>\n\n\n\n<p>Return @TotalStock<\/p>\n\n\n\n<p>End<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Categoria 1<\/strong><\/p>\n\n\n\n<p>Select &#8216;Existe: &#8216;+Ltrim(Str(dbo.fnStockxCategoria(1))) + &#8216; art\u00edculos&#8217;<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Categoria 5<\/strong><\/p>\n\n\n\n<p>Select &#8216;Existe: &#8216;+Ltrim(Str(dbo.fnStockxCategoria(5))) + &#8216; art\u00edculos&#8217;<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p><strong>Implementar la funci\u00f3n anterior pero asignando el nombre de la categor\u00eda<\/strong><\/p>\n\n\n\n<p>&#8212; Cuantos art\u00edculos en stock hay de Confections<\/p>\n\n\n\n<p>Declare @CodigoCategoria int<\/p>\n\n\n\n<p>Select @CodigoCategoria=categoryid from categories&nbsp; where Categoryname=&#8217;Confections&#8217;<\/p>\n\n\n\n<p>Select &nbsp;&#8216;Existe: &#8216;+Ltrim(Str(dbo.fnStockxCategoria(@CodigoCategoria))) + &#8216; art\u00edculos&#8217;<\/p>\n\n\n\n<p>go<br><script>&lt;br \/>      (adsbygoogle = window.adsbygoogle || []).push({});&lt;br \/> <\/script><\/p>\n\n\n\n<p><strong>Cuantos art\u00edculos hay de categor\u00eda Huesos, podemos incluir la FDU en un Procedimiento (<a href=\"http:\/\/www.manualsqlserver.com\/?p=314\">Ver procedimientos<\/a>)<\/strong><\/p>\n\n\n\n<p>Create procedure spVerCantidadArticulosStockxCategoria ( @NombreCategoria nvarchar(15) )<\/p>\n\n\n\n<p>As<\/p>\n\n\n\n<p>if &nbsp;exists (select &nbsp;* from categories where categoryname = @NombreCategoria)<\/p>\n\n\n\n<p>Begin<\/p>\n\n\n\n<p>Declare @IDCategoria int<\/p>\n\n\n\n<p>select @IDCategoria = CategoryId from Categories&nbsp; where CategoryName=@NombreCategoria<\/p>\n\n\n\n<p>select &#8216;Existen : &#8216; + Ltrim(Str(dbo.fnStockxCategoria(@IDCategoria))) + &#8216; Productos&#8217;<\/p>\n\n\n\n<p>End<\/p>\n\n\n\n<p>Else<\/p>\n\n\n\n<p>Begin<\/p>\n\n\n\n<p>Print &#8216;No existe la categoria &#8216; + @NombreCategoria<\/p>\n\n\n\n<p>End<\/p>\n\n\n\n<p>go<\/p>\n\n\n\n<p>Prueba<\/p>\n\n\n\n<p>Exec spVerCantidadArticulosStockxCategoria &#8216;Beverages&#8217;<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n\n<p><strong>Funci\u00f3n que permita mostrar los clientes y la cantidad &nbsp;comprada de una determinada ciudad.<\/strong><br>Create function dbo.fCantidadxClientexPais(@Pais nvarchar(15))<br>Returns Table<br>As<br>Return select C.CustomerID As &#8216;C\u00f3digo Cliente&#8217;,<br>C.CompanyName As &#8216;Empresa&#8217;, C.Country,<br>Sum(O.Freight) As Monto<br>from Customers As C<br>join Orders As O on C.CustomerID = O.CustomerID<br>where C.Country= @Pais<br>group by C.CustomerID, C.CompanyName, C.Country<br>go<\/p>\n\n\n\n<p><strong>&#8212; Ver los clientes de Per\u00fa<\/strong><br>select * from dbo.fCantidadxClientexPais(&#8216;Per\u00fa&#8217;)<br>go<\/p>\n\n\n\n<p><strong>Ver los clientes de Francia<\/strong><br>select * from dbo.fCantidadxClientexPais(&#8216;France&#8217;)<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_FDU_Ejercicio_01.png\" alt=\"\" class=\"wp-image-967\" width=\"748\" height=\"416\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_FDU_Ejercicio_01.png 626w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_FDU_Ejercicio_01-300x167.png 300w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><\/figure><\/div>\n\n\n\n<p><strong>&#8212; Comprobando que el pa\u00eds exista<\/strong><br>Create procedure spCantidadxClientesxPais<br>(<br>@Pais nvarchar(15)<br>)<br>As<br>if exists(select Country from Customers where Country =@Pais)<br>Begin<br>select * from dbo.fCantidadxClientexPais(@Pais)<br>End<br>Else<br>Begin<br>Select &#8216;No existe el pa\u00eds especificado&#8217;<br>End<br>go<\/p>\n\n\n\n<p><strong>&#8212; Pruebas<\/strong><br>Exec spCantidadxClientesxPais &#8216;France&#8217;<br>go<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Funciones definidas por el usuario FDU Las funciones definidas por el usuario permiten obtener resultados que las funciones propias de SQL Server no pueden mostrarnos, son de mucha utilidad para optimizar el trabajo de consultas con par\u00e1metros. Para mejor informaci\u00f3n ver Funciones definidas por el usuario.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=419\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":962,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[236,8],"tags":[29,67,53],"class_list":["post-419","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-udffunciones","category-programacion","tag-fdu","tag-funciones-deficidas-por-el-usuario","tag-sqlserver","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=419"}],"version-history":[{"count":4,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/419\/revisions"}],"predecessor-version":[{"id":980,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/419\/revisions\/980"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/962"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}