\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{davidps79} \pdfinfo{ /Title (plsql.pdf) /Creator (Cheatography) /Author (davidps79) /Subject (PLSQL Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{PLSQL Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{davidps79} via \textcolor{DarkBackground}{\uline{cheatography.com/184598/cs/38530/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}davidps79 \\ \uline{cheatography.com/davidps79} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 4th May, 2023.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Bloque PL/SQL}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Un bloque PL/SQL es una unidad de código que contiene una o más sentencias PL/SQL. La estructura general de un bloque PL/SQL es la siguiente:} \tn % Row Count 3 (+ 3) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Estructura general de un bloque}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline -{}- Declaraciones de variables locales y tipos de datos personalizados \newline BEGIN \newline -{}- Sentencias PL/SQL \newline -{}- Incluyendo sentencias SELECT, INSERT, UPDATE, DELETE, y llamadas a procedimientos y funciones \newline EXCEPTION \newline -{}- Manejo de errores \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline resultado NUMBER; \newline BEGIN \newline resultado := 10 + 5; \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('El} resultado es: ' || resultado); \newline EXCEPTION \newline WHEN OTHERS THEN \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('Error:} ' || SQLERRM); \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.24425 cm} x{3.73275 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Estructura general}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{DECLARE}} & se utiliza para declarar variables locales y tipos de datos personalizados que se utilizarán dentro del bloque. \tn % Row Count 4 (+ 4) % Row 1 \SetRowColor{white} {\bf{BEGIN}} & se colocan las sentencias PL/SQL que realizan alguna operación. \tn % Row Count 7 (+ 3) % Row 2 \SetRowColor{LightBackground} {\bf{EXCEPTION}} & se utiliza para manejar cualquier error que ocurra durante la ejecución del bloque PL/SQL. \tn % Row Count 11 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Declaración variables}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline \textless{}Nombre\textgreater{} \textless{}Tipo\textgreater{} := \textless{}Valor\textgreater{}; \newline \newline DECLARE \newline nombre VARCHAR2(50) := 'Juan'; \newline \newline DECLARE \newline es\_verdadero BOOLEAN := TRUE; \newline \newline DECLARE \newline edad NUMBER:= 25;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Declaración constantes}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline \textless{}Nombre\textgreater{} CONSTANT \textless{}Tipo\textgreater{} := \textless{}Valor\textgreater{}; \newline \newline DECLARE \newline nombre CONSTANT VARCHAR2(50) := 'Juan'; \newline \newline DECLARE \newline es\_verdadero CONSTANT BOOLEAN := TRUE; \newline \newline DECLARE \newline edad CONSTANT NUMBER:= 25;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Procesdimientos y funciones}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Los procedimientos y las funciones son subprogramas que permiten agrupar y reutilizar bloques de código. Los procedimientos se utilizan para realizar acciones o tareas, mientras que las funciones devuelven un valor} \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Procedimientos}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{CREATE OR REPLACE PROCEDURE imprimir\_saludo(nombre IN VARCHAR2) IS \newline BEGIN \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('¡Hola}, ' || nombre || '!'); \newline END; \newline \newline -{}- Uso del procedimiento \newline BEGIN \newline \seqsplit{imprimir\_saludo('Juan');} \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Funciones}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{CREATE OR REPLACE FUNCTION totalCustomers \newline RETURN number IS \newline total number(2) := 0; \newline BEGIN \newline SELECT count(*) into total \newline FROM customers; \newline \newline RETURN total; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Instrucciones de control}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Las instrucciones de control en PL/SQL permiten controlar el flujo de ejecución de un programa, permitiendo tomar decisiones y repetir acciones según sea necesario.} \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{IF-THEN-ELSE}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Esta instrucción se utiliza para tomar decisiones basadas en una condición. Si la condición es verdadera, se ejecuta un bloque de código; de lo contrario, se ejecuta un bloque de código diferente.} \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline salario number := 5000; \newline BEGIN \newline IF salario \textgreater{} 5000 THEN \newline \seqsplit{dbms\_output.put\_line('Salario} alto'); \newline ELSE \newline \seqsplit{dbms\_output.put\_line('Salario} bajo'); \newline END IF; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{CASE}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Esta instrucción se utiliza para tomar decisiones basadas en múltiples condiciones. Se pueden definir varios casos, cada uno con su propia condición y código a ejecutar.} \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline dia\_semana number := 2; \newline BEGIN \newline CASE dia\_semana \newline WHEN 1 THEN \seqsplit{dbms\_output.put\_line('Lunes');} \newline WHEN 2 THEN \seqsplit{dbms\_output.put\_line('Martes');} \newline WHEN 3 THEN \seqsplit{dbms\_output.put\_line('Miércoles');} \newline WHEN 4 THEN \seqsplit{dbms\_output.put\_line('Jueves');} \newline WHEN 5 THEN \seqsplit{dbms\_output.put\_line('Viernes');} \newline ELSE \seqsplit{dbms\_output.put\_line('Fin} de semana'); \newline END CASE; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{FOR LOOP}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Esta instrucción se utiliza para repetir una acción un número determinado de veces.} \tn % Row Count 2 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline i number; \newline BEGIN \newline FOR i IN 1..5 LOOP \newline \seqsplit{dbms\_output.put\_line('Iteración} ' || i); \newline END LOOP; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{WHILE LOOP}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Esta instrucción se utiliza para repetir una acción mientras se cumple una condición.} \tn % Row Count 2 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline i number := 1; \newline BEGIN \newline WHILE i \textless{}= 5 LOOP \newline \seqsplit{dbms\_output.put\_line('Iteración} ' || i); \newline i := i + 1; \newline END LOOP; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Cursores}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{En SQL, un cursor es una estructura de control utilizada para recorrer y manipular filas de un resultado de consulta de forma secuencial. Los cursores proporcionan un mecanismo para procesar registros uno a uno y realizar operaciones específicas en cada uno de ellos.% Row Count 6 (+ 6) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline -{}- Declaración del cursor \newline CURSOR c\_empleados IS \newline SELECT salario FROM Empleados; \newline \newline -{}- Variables auxiliares \newline total\_salarios NUMBER := 0; \newline contador NUMBER := 0; \newline promedio\_salarios NUMBER; \newline BEGIN \newline -{}- Abrir el cursor \newline OPEN c\_empleados; \newline \newline -{}- Recorrer el cursor y calcular el total de los salarios \newline FOR empleado IN c\_empleados LOOP \newline total\_salarios := total\_salarios + empleado.salario; \newline contador := contador + 1; \newline END LOOP; \newline \newline -{}- Calcular el promedio de los salarios \newline IF contador \textgreater{} 0 THEN \newline promedio\_salarios := total\_salarios / contador; \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('El} promedio de los salarios es: ' || promedio\_salarios); \newline ELSE \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('No} se encontraron empleados'); \newline END IF; \newline \newline -{}- Cerrar el cursor \newline CLOSE c\_empleados; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Trigger BEFORE}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Se ejecuta antes de que se aplique una operación en la tabla. Puede utilizarse para validar o modificar los datos antes de que se realice la acción en la tabla.% Row Count 4 (+ 4) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{CREATE OR REPLACE TRIGGER before\_insert\_trigger \newline BEFORE INSERT ON mi\_tabla \newline FOR EACH ROW \newline BEGIN \newline IF :new.valor \textgreater{} 0 THEN \newline -{}- Permitir la inserción \newline NULL; \newline ELSE \newline -{}- Cancelar la inserción \newline \seqsplit{RAISE\_APPLICATION\_ERROR(-20001}, 'El valor debe ser mayor que cero.'); \newline END IF; \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Trigger AFTER}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Un trigger AFTER se ejecuta después de que se haya aplicado una operación en la tabla. Se utiliza principalmente para realizar acciones posteriores a la modificación de datos.% Row Count 4 (+ 4) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{CREATE OR REPLACE TRIGGER after\_update\_trigger \newline AFTER UPDATE ON mi\_tabla \newline FOR EACH ROW \newline BEGIN \newline INSERT INTO historial\_tabla (id\_registro, fecha\_modificacion) \newline VALUES (:old.id, SYSDATE); \newline END; \newline /} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Trigger INSTEAD OF}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Un trigger INSTEAD OF se utiliza en vistas actualizables y permite reemplazar la acción predeterminada que se llevaría a cabo en una operación de inserción, actualización o eliminación en la vista} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{CREATE OR REPLACE TRIGGER \seqsplit{instead\_of\_insert\_trigger} \newline INSTEAD OF INSERT ON mi\_vista \newline BEGIN \newline \seqsplit{RAISE\_APPLICATION\_ERROR(-20002}, 'La vista no es actualizable.'); \newline END; \newline /} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Excepción}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Evento que ocurre durante la ejecución de un bloque de código que interrumpe el flujo normal del programa. Las excepciones pueden ser causadas por errores de programación, condiciones imprevistas o errores del sistema.} \tn % Row Count 5 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.04057 cm} x{2.93643 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Tipos}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{Predefinidas}} & ya están definidas en el lenguaje, como la excepción "NO\_DATA\_FOUND" que se lanza cuando una consulta SELECT no devuelve ninguna fila. \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} {\bf{Definidas por el usuario}} & son excepciones personalizadas creadas por el programador para manejar situaciones específicas en su código. \tn % Row Count 11 (+ 5) % Row 2 \SetRowColor{LightBackground} {\bf{De sistema}} & son excepciones generadas por el sistema, como la excepción "ORA-00001: unique constraint violated" que se lanza cuando se intenta insertar una fila con una clave primaria duplicada. \tn % Row Count 19 (+ 8) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Manejo de Excepciones}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Se utiliza la estructura TRY-CATCH. El código que se sospecha que puede generar una excepción se coloca dentro del bloque TRY. Si se produce una excepción dentro del bloque TRY, se activa la excepción y el control se transfiere al bloque CATCH. Dentro del bloque CATCH, se puede proporcionar una respuesta a la excepción y tomar medidas para manejarla.} \tn % Row Count 8 (+ 8) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Ejemplo}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{DECLARE \newline v\_emp\_name VARCHAR2(50); \newline BEGIN \newline SELECT emp\_name INTO v\_emp\_name FROM employees WHERE emp\_id = 1000; \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('Employee} Name: ' || v\_emp\_name); \newline EXCEPTION \newline WHEN NO\_DATA\_FOUND THEN \newline \seqsplit{DBMS\_OUTPUT.PUT\_LINE('No} employee found with ID 1000'); \newline END;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Triggers}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Es un bloque de código que se ejecuta automáticamente en respuesta a ciertos eventos, como la inserción, actualización o eliminación de filas en una tabla.} \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Uso}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Un trigger puede ser utilizado para realizar acciones específicas antes o después de que ocurra un evento, como validar datos, auditar cambios, actualizar valores relacionados, entre otras acciones.} \tn % Row Count 4 (+ 4) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}