programacion con plsql i

12
PROGRAMACIÓN CON PL/SQL 1LOS IDENTIFICADORES 2LAS VARIABLES 2.1DECLARACIÓN DE VARIABLES

Upload: dani-casti

Post on 06-Nov-2015

245 views

Category:

Documents


3 download

DESCRIPTION

PROGRAMACION CON PLSQL I.pdf

TRANSCRIPT

  • nombre CHAR(20) NOT NULL DEFAULT "MIGUEL";

    La opcin N([))'fNlUJll fuerza a que LavariabLe tenga siempre un vaLor. Si se usa, deber inicia-Lizarse la variabLe en la declaracin con DEFAULTo con := para Lainicializacin. Por ejemplo:

    Para cada variabLe se debe especificar eLtipo. No se puede, como en otros lenguajes, indi-car una lista de variables del mismo tipo y, a continuacin, eLtipo. PLjSQL no lo permite.

    DECLAREimporte NUMBER(8,2);contador NUMBER(2,O) := O;nombre CHAR (2O) NOT 1'-JULL:= "MIGUEL";

    La opcin 1D)!EIFA!IJ}lT (o bien La asignacin

  • Una variable declarada en un bloque ser local para el bloque en el que ha sido decla-rada y global para los bloques hijos de ste. Las variables declaradas en los bloques hijosno son accesibles desde el bloque padre.

    Las variables se crean al comienzo del bloque y dejan de existir una vez finalizada Laejecucin del bloque en' el que han sido declaradas. El mbito de una variable incluye elbloque en el que se declara y sus bloques hijos.

    DBMS_OUTPUT.PUT_LINE(moroso.nombre);

    Para hacer referencia a cada uno de los campos indicaremos el nombre de la variable, unpunto y el nombre del campo que coincide con el de la columna correspondiente. Porejemplo:

    Declara la variable moroso que podr contener una fila de la tabla clientes.

    - ~oroso clientes%ROWTYPE;

    Declara la variable nombre_moroso del mismo tipo que la columna nombre dela tabla clientes.

    - nombre_moroso clientes.nombre%TYPE;

    L. '---_ . ..~.. __ .,_

    ! Al declarar una variable del mismo tipo que otro objeto usando los atributosi %TYPEY%ROWTYPE,se hereda el tipo y! la longitud, pero notos posibles atribu-itas NOTNULLni los valores por defectoI que tuviese definidos el objeto original.

    Declara la variable total del mismo tipo que la variable importe que se habrdefinido previamente.

    - total importe%TYPE;

    Ejemplos:

    1'-.._..._-_ ..__.__ .__ ...-.-_. __._..._-_. __ .- ..- ...'--'-' -- .-._.- ...- ..-..----- ....------ --- - ...--- .....-- ...- __ '_" __ "_."_ .. . .....

    nombre_variable no~bre_objeto%ROWTYPE; I1__ _-- - - ..- - -.- ..-.----.-- - ..----.-- .. -- -.---.- __ . ._._ _. .__ .. __ .._._ "_'_' "_'_"' __' ' .._._._. 1

    %IROWTVIflIIE declara una variable de registro cuyos campos se corresponden con lascolumnas de una tabla o vista de Labase de datos. Su formato es:

    i: ._00 __ _'__ _~.w. ~ .. ._' , , . . _..0__ "00_' ,_ ._._. ' _ _. __ ~_. __ _ ...... _ .. _~ __ ----=

    r-_._-_._...---------..----.-.--.-,,_. 00- ------------.-- - -- - --- --------_. _, -_._._._. -_ ...... ~._. _'w ' __R 0_- --_- '_ - .. ~ -.... . .. __ . _. __ ~ . ~~j nombre_vo_ritblenombre_obj et:.o%TYPE;

    %1Y1P'1Edeclara una variable del mismo tipo que otra, o que una columna de unatabla. Su formato es:

    En lugar de indicar explcitamente el tipo y la longitud de una variable existe la posibi-lidad de utilizar los atributos %TYPEy OfoROWTYPEpara declarar variables que sean delmismo tipo que otros objetos ya definidos.

    Si no se inicializan Lasvariables en PLjSQLr se garan-tiza que su valor es NULL.

    2.2USODELOSATRIBUTOS%TYPEy%ROWTYPE

    2.3MBITOYVISIBILIDADDEVARIABLES

  • En caso de coincidencia, Losidentificadores de columnas tienen precedencia sobre las varia-bles y parmetros formales; stos, a su vez, tienen precedencia sobre Losnombres de tablas.

    En el caso de que un identificador local coincida con uno global, si no se indica ms, se refe-rencia el Local. Es decir, el identificador local dentro de su mbito oculta la visibilidad del glo-bal. No obstante, se pueden utilizar etiquetas y cualificadores para deshacer ambigedades.

    Ejemplo:

    DECLARE V1CHAR;BEGIN V1:=27; DECLARE V2CHAR; BEGIN V2:=2; V1:=V2; END; V2:=V1;Error,v2noexisteenesteambitoEND;

    Ejemplo:

    DECLARE VCHAR;BEGIN DECLARE VCHAR; BEGIN V:=padre.V; .. END;END;

    3 CONSTANTESYLITERALES

    3.1CONSTANTES CONSTANT:= Ejemplo: Pct_ivaCONSTANTNUMBER(2):=16;3.2LITERALES Representavaloresconstantesdirectamente(sinidentificadores).Seutilizanparavisualizarvalores,asignarvariables,constantes,etc.

  • TIMESTAMP '2005-11-09 13:50:00' (para TIMESTAHP WITH LOCALTIME ZONE)

    TI~lliSTAMP'2005-11-09 13:50:00 +06:00' (para TIMESTAMP WITHTIME ZONE)

    Tambin podemos representar valores correspondientes a los subtipos ][MIESTAMP w:nn~l'KMt:ZON[ y lrIMIESTAMP Wlr1n-B iLOCAll1i"JIMIEZONIEutilizando la palabra TIMESTAMPy lacadena en el formato correspondiente al subtipo que queremos representar como semuestra en Los siguientes ejemplos:

    Se utilizan para representar valores de fecha y hora segn Los distintos formatos estudia-dos anteriormente. Se representan mediante la expresin que. indica el tipo DATEo TIMES-TA~.!\Pseguida de Lacadena delimitada que indica el valor que queremos representar. Porejemplo: DATE '2005-11-09' TIMESTAMP' 2005-11-09 13:50:00' .

    Representan los valores lgicos verdadero, falso y nulo. Se representan mediante las pala-bras TllfUiE,-fALSIE y NIULl escritas directamente en el-cdigo y si n comillas (no son lite-rales sino palabras reservadas del lenguaje). Se pueden utilizar para asignar valores avariables y constantes, o para comprobar el resuLtado de expresiones lgicas.Ejemplos: v_cobrado TRUE; v_enviado. - FALSE;

    ~~rese.ntan valores numricos enteros o reales. Se pueden representar con notacin cien-ca.~emp~s:4, -7,567.45, -458.456 2234E4 5 25 5,. ,. e-, -8,75E+2

    Dar el error: ORA-Ol756. quoted s t r t. lng no properly terminated.

    En estos casos emplearemos dos comillas simples en el lugar donde debe aparecer una:

    DBMS_OUTPUT.PUT_LINE('Peter' 's hotel'); END;

    El resultado ser el deseado: Peter' s hotel.

    En ?c~siones necesitaremos incluir el carcter utiLizado como delimitador en Lacadena ocaracter que queremos representar. Por ejempLo:DBMS_OUTPUT.PUT LTNE (hotel');. - - 'Peter's

    Son conjun~os d,e caracteres introducidos entre comillas simples. Ejemplos: 'HolaMundo', Cllente N2; " 'Introduzca un valor ... '

    Ec?nstaln de un nico carcter aLfanumrico o especial introducido entre comillas simplesJemp os: 'A', ' a ' , J' , , 5 I , 2, , , * , ., , 'o

    Puedenserdevariostipos:

  • II~~~:~.:~J[-~;~~~_-:-~:__-~~~:-~~~-:I[~0~~~~~~*,~ci[~~~~~~-~----31 3 11 +, -, 1I j Suma, resta, concatenacin. if' ..... ' "'. ~.0_. __0 ~~ .~. ,_ _ t f -oo, '00' -- ._-- -_ - ._. -,' 0_, ,-, _. 0-' _" - o.' "1 ;' _.. - "- .., -,- _, _. ~':: o_ _. "_' - _. o_o o.. -- _ '00' 0_0 "'--'1 4 ! l =, !=, ,Funcionan igual que en SQL.

    Los operadores se utilizan para asignar valores y formar expresiones. PL/SQL dispone de

    operadores de:

    AsignaciilI.. Asigna un valor a una variable.Por ejemplo: Edad := 19;

    Concatenacin. 11 Une dos o ms cadenas.d ~ ltado 'buenosdas'.Por ejemplo: .buenos' 1 1 I das' ara como resu

    =, IN, IS NULL, LIKE, BETWEEN,...

    4 OPERADORESYDELIMITADORES

  • r!j____ J

    (ELSE

    instrucciones2;ELSIF THEN

    cin, hasta encontrar alguna condicin que se cum-pla, en cuyo caso ejecutar las instrucciones quesiguen a Laclusula THENcorrespondiente. La clu-sula ELSEes opcional; en caso de que se utilice, seejecutar cuando no se ha cumplido ninguna de lasinstrucciones3;

    f--------------------------l r- --.--.--------.--- -'---,! IF -ccoridi.c i.onl.c- THEN 1 EvaLa,comenzando desde el principio, cada condi-, ' ; instruccionesl; i

    i iELSIF THEN !

    i:

    i fi;~!! !~~:' i

    condiciones anteriores.~i, 1:

    instruccionesotrasl ENDIF -_----- .._--------------_. --_j _,--_ .._-_._-_._----_ ...----------_.

    r-'-'--- ...-..---------- ..-..-..-----.- ...--, ,--.-------.-.----------.-- ...------.---! IF THEN ! Si la condicin se cumple, se ejecutan las instrucciones! ! ,! instruccionesl; ELSE i que siguen a la clusula THEN.En caso contrario, se eje- i: : f 1! ins t.rucciones2 i ENDIF; !! cutarn las instrucciones que siguen a la clusula ELSE. i _ .. - ~_. .. - __ - : I .. o_"_O __ o __ __ o " .. J

    L__,._:.~~..~:~~~-'.~=~~=~.~,:::~~T=~7:':~;:;.~~:::.~l~J~r.~~~.~~~~~1r!8~;::~t~.~~i~~:.._:)i~.,~~~":_~L:::~t:~~.~::~2L~.::~i:~i'_:.;~!- .-.-_ ...._.__..... - ..--. __ ._ -- .. -....... _ ... --.- ....- -.-.----; 1-"-- ...---.---.------_._------.--.-_.--.._..-_...-...._- IF -ccorrd i c i oric- TREN ! Si la condicin se cumple, se ejecutan Lasinstruccio-, instrucciones; ENDIF; 1I nes que siguen a la clusula THEN.; __ .. ' .. --- --- -- .... ----_ ...-._._---_ .....--_._--' !_----_ ._----_._ .._--_._.- _._ ..... - --'---'''-'''-' --- .... -.

    De vanas lineas con "j":" ",':In (igual que en C). Se pueden incluiren cualquier seccin deL programa. Es aconsejable, aunque no obLigatorio, que inclu-yan una o varias Lneas completas.

    [)le linea con "--". Todo Loque le sigue en esa lnea ser considerado comentario.Todos los comentarios incluidos en el cdigo hasta el momento son de este ripo.

    Los comentarios se utiLizan para documentar datos generales y particulares de Los progra-mas (el autor, Lafecha, el objeto deLprograma, aspectos relevantes o hitos en el programa,funcin de determinados objetos o comentarios explicativos) e incluso para aadir legibi-lidad y organizacin a nuestros programas: Lneas de separacin, etctera. En PLjSQL, pode':mos insertar comentarios en cualquier parte del programa. Estos comentarios pueden ser:

    Respecto a Lautilizacin de funciones, tambin debemos tener en cuenta que:

    La funcin no modifica el valor de las variables o expresiones que se pasan comoargumento, sino que devuelve un valor a partir de dicho argumento.

    Si a una funcin se Lepasa un vaLor nulo en la Llamada, normalmente devoLver unvaLor nulo.

    En PLjSQL se pueden utilizar todas Las funciones de SOL No obstante, algunas, como ias

    d . t (AVG MIN MAX COUNT SUM STODEV, etctera), solamente se puedene aqruparmen o I ' , , ,usar dentro de clusuLas de seleccin (SELECT).

    5 FUNCIONESPREDEFINIDAS

    6 COMENTARIOSDEDOCUMENTACINDEPROGRAMAS

    7 ESTRUCTURASDECONTROL

  • emple al que subir salariocantidad empl dependen de limporte que vamos a aumentar.

    DECLAREv_empleada_no NUMBER(4,O);v_c_empleados NUMBER(2);v_aumento NUMBER(7) DEFAULT O;v_oficio VARCHAR2(lO);

    Adems, si el empleado es PRESIDENTEse incrementar eLsalario en 30 .

    - Si tiene ms de tres empleados la subida ser 110 .

    - Si tiene 2 empleados la subida ser 100 .

    - Si tiene 1 empleado la subida ser 80 .

    - Si no tiene ningn empLeado a su cargo la subida ser 50 .

    Supongamos que pretendemos modificar el salario de un empleado especificado en funcin del nmero de emplea-dos que tiene a su cargo:

    condiciones anteriores.

    i! Evala, comenzando desde el principio, cada candi-l cin, hasta encontrar alguna condicin que se cum-

    pla, en cuyo caso ejecutar las instrucciones que! !i siguen a la clusula TH EN correspondiente. La clu-~: sula ELSEes opcional; en caso de que se utilice, se[ ejecuta cuando no se ha cumplido ninguna de las~:

    instruccionesotras;]END CASE;

    (ELSE

    CASEWHEN TREN

    instruccionesl;WHEN -ccondi c.onzTHEN

    instrucciones2;WHEN THEN

    instrucciones3;

    . ,END CASE; :i

    _ .~._. __ __ ~ o_ ... ._. __ _J 1_. , ...._. __o _ ........ _ ... ~_ _ _, __

    ejecutar la instruccin o instrucciones correspon-dientes. La clusula ELSEes opcional; se ejecutar en

    I caso de que no se encuentre un valor coincidente en! Las clusulas WH ENprecedentes.~!

    j1 1! ~

    , . obtenido coincide con alguno de los valores especi- ficados detrs de las clusulas WHEN, en cuyo caso1 !

    : Calcula el resultado de la expresin que sigue a la; i clusula CASE.A continuacin, comprueba si el valor: i~

    [ELSEinstruccionesotras;]

    CASE expresinWHEN' THEN

    instruccionesl;WHEN THEN

    instrucciones2;WHEN THEN

    instrucciones3;

    Ejemplo:

  • dicin de continuacin.END LOOP;

    END LOOP;,jj _.__._-_.__~.._.-~--- _ .._-__--.__ -..-.._.._---_._--_,_..,~-.-._--._---.__..__- _-

    .---- ... ---.-', '_"0'''' ,,,,._00._ ..00 , " - - .---- ..-.-----~- . -.--.-. -- , . ". ,.0_,_ _ 0'_-- .-- .- ..... __ ~- '._O' __ _. __ .... '-'_- _.~- -._.-: ... -_._-:.-_ ~:-- -_ ..... _ .... _ ..... _"7-.. ___ .......... ...___ .

    ..__.: __ru_~~_l$_~~~~;._~~_:--.~=-._--'--._-.-.-.._-_._ ..'_._=:__.:==:::::~=:==:=-_=::.._~.,i - -- ..---,--- _: . ----.:. ..---------- _ .0__ _ __ -----.... -----------;, f Se evala Lacondici n y, 51 se cumple, se eiecutarn r- WHILE -cc ond .c .onc- LOOP , elinstrucciones; las instrucciones del bucle. ELbucle se seguir ejecu-

    tando mientras se cumpLa Lacondicin. Es una con-

    instrucciones;

    ,-_-..__.._ .'- - ..-._" ~~_._.._ ,:.. ..,_""",~;-..--,..-.--..,........,~:-: . H'ieI'SJ~' . "'.

    i6~::=~_~::-::~=-~..~----::_~~..~=-::~-if~~-~~;;::~-.~~-~~~~~~~.~;-;;~;:~~~~~-~~~;~~~~~:~;~;~-'lInstrucciones; l! hasta que encuentre una instruccin EXITsin condi-

    EXIT [WHEN -ccond.i.c i.nc- j ! cin o hasta que se cumpla Lacondicin asociada a Lai clusuLa EXITWHEN. Es una condicin de salida.

    END CASE;

    v_aumento + 100;v_aumentoELSE

    v_aumento._ v_aumento + 110;

    v_aumento + 50;v_aumentoWHEN 1 THEN

    v_aumento._ v_aumento + 80;WHEN 2 THEN

    CASE v_c_empleadosWHEN O THEN

    -------------------------------CASEWHEN v_e_empleados = O THEN

    v_aumento := v_aumento + 50;WHEN v_e_empleados = 1 THEN

    v_aumento := v_aumento + 80;~m~N v_c_empleados = 2 THEN

    v_aumento .- v_aumento + 100;ELSE

    v_aumento .- v_aumento + 110;END CASE;

    CON CASE DE COMPROBACIN~------------------------------CON CASE DE BSQUEDA

    En el programa anterior hemos utilizado una estructura ELSIFpero podamos haber utilizado una estructura CASEen cual-quiera de sus dos formatos:

    v_empleada_no;UPDATE emple SET salario = salario + v_aumento WHERE emp_noDBMS_OUTPUT.PUT_LINE(v_aumento};END;I

    alternativa mltipleIF v_c_empleados = O TRENv_aumento := v_aumento + 50;ELSIF v_c_empleados = 1 TREN

    v_aumento := v aumento + 80;ELSIF v_c_empleados = 2 TREN

    v_aumento .- v_aumento + 100;ELSE

    v_aumento .- v_aumento + 110;END IF;

    SELECT COUNT(*} into v_c_empleados FROM emple~~ERE dir = v_empleada_no;

    IF v_oficio = 'PRESIDENTE' TREN -- alternativa simplev_aumento ._ 30;

    END IF;

    SELECT oficio INTO v_oficio FROM empleWHERE emp_no = v_empleada_no;

    -- var de sustitucin lee nQempleBEGIN

    v_empleada_no := &vt_empno;

  • END LOOP;

    FOR IN .. LOOPinstrucciones;

    PL/SQLpermite la utilizacin de EXITincluso en otros bucles y estructuras. Esta prcticaes totalmente desaconsejable.

    EXIT;END IF;instrucciones;

    END LOOP;

    instrucciones;IF THEN

    LOOP

    Dor es una instruccin en s misma (por eso LLevapunto y coma al tinal) y puede serutilizada con o sin la clusula WHEN.

    Introduzca valor para vs_apellidos: GIL MORENOler Apellido:GIL*Procedimiento PL/SQL terminado con xito.

    El resultado de la ejecucin ser:

    END;/

    v_caracter := SUBSTR(v_apellidos,v_posicion,l);WHILE v_caracter BETWEEN 'A' AND 'Z' LOOP

    v_lapel := v_lapel II v_caracter;v_posicion v_posicion + 1;v_caracter := SUBSTR(v_apellidos,v_posicion,l);

    END LOOP;DBMS_OUTPUT.PUT_LINE( 'ler Apellido:' IIv_lapell I'*');

    BEGINv_apellidos := '&vs_apellidos';

    DECLAREv_apellidos VARCHAR2(25);v_lapel VARCHAR2(25);v_caracter CHAR;v_posicion INTEGER :=1;

    Supongamos que deseamos analizar una cadena que contiene Losdos apettidos para guardar el primer apellido en unavariable a la que llamaremos v_lapeL Entendemos que el primer apellido termina cuando encontramos cualquiercarcter distinto de los alfabticos (en maysculas).

    Ejemplo:

    Ejercicio:RealizaelejercicioanteriorconlaestructuraIterar.

  • /*Lavariablelocaldel bucle ya no existeaqu */END ppal;

    /* cualquier referencia a i ser entendida como a lavariable local al bucle. Si quisiramosreferirnos ala otra lo debemoshacer como ppal_i */END LOOP;

    FOR i IN l._lO LOOP

    ppalDECLARE

    i INTEGER;BEGIN

    Enel siguiente ejemplo, definimos una variable e intentamos usarla como variable decontrol. Aun en ese caso la estructura crear la suya propia como local, quedando lanuestra como global en el bucle:

    Se puede usar dentro del bucle.en una expresin, pero no se le pueden asignar valores.

    Es local al bucle y no es accesible desde el exterior del bucle, ni siquiera en el mismobloque.

    No hay que declararla.

    Respecto a la variable de control, hay que tener en cuenta que:

    END;

    END LOOP;

    FOR x IN Numl ..Num2 LOOP

    BEGIN

    DECLARENurnlINTEGER;Nurn2INTEGER;

    32lProcedimiento FL/SQL te=minado con ~ito.Podemos indicar los valores mnimo y mximo mediante expresiones:

    SQL> BEGIN2 FOR i IN REVERSE l..3 LOOP3 DBMS_OUTFUT.PUT_LINE(i)4 END LOOP;S END;6 /

    En este caso, comenzar por el valor especificado en segundo lugar e ir restando unaunidad en cada i-teracin:

    END LOOP;

    FOR IN REVERSE _oLOOP

    instrucciones;

    El incremen-to siempre es una unidad, pero puede ser neqa t.ivo utilizando la COl~cciiIRIEVfCRS!E~

    Se utri liza esta e str uct.ura cuando se conoce o se puede co nocer a priori el nmero deveces que se debe ejecutar un bucle.

    Donde es la variable de control del bucle que se declara demanera implcita como variable localal bucle de tipo BINARY_II\ITEGER.Esta variabletomar, en primer lugar, el valor especificado en la expresin nurnrica ,incrementndose en uno para cada nueva iteracin has-ta alcanzar el valor especificado enla expresin numrica .

  • EXIT bucleext:erno W1-IEN -- sale de ambos buclesEND LOOP;

    END LOOP bucleexterno;

    LOOP

    bucleexternoLOOP

    Tambin se pueden etiquetar las estructuras para eliminar ambigedades, hacer visiblesvariables globales y conseguir otras funcionalidades:

    END LOOP mibucle;

    LOOPinst:rucciones;

    mibucle

    Podemos etiquetar bucles y otras estructuras para conseguir mayor legibilidad:

    Donde los delimitadores forman parte de la sintaxis y norobretiqueta repre-senta un identificador vlido PL/SOLque utilizaremos despus (en este caso, sin los deli-mitadores) para hacer referencia al eLemento.

    -- . \!l''----------.-----------.-.--~.---.:; /i ALORI! Procedimiento PL/SQL terminado con xito_

    '-_. ..__ .. ... .._~ . .. ._.._~_,__.__._,__._...~._ ..__._.,,~_.____ . .__ ..,__", _,_. ..._ , L_.. . ..__ .. . . . ~_ ..,.._. __ ..__ .._ .. ..H_ ' '0

    \Iamos l construir de dos maneras un bloque PLjSOl que escriba la cadena 'HOLA'al revs.

    ~~jtr:i~;~~ai~1~'~~{fii~~[~~;jt:~~~f~\~~:1

    Ejemplo:

    Ejercicio:

    8 UTILIZACINDEETIQUETAS:

  • ! :

    Ii ~END;--ilegal est en el bloque actual.GOTO mi_etiqueta;i ! .

    11 EXCEPTIONWHEN '" THEN

    mi_etiqueta

    otro_subDELETE FROM '"

    END;,i!, ,1; !1:i i

    BEGIN-- ilegal, est en otro sub-bloqueGOTO otro_sub;

    END IF;

    insertar filaINSERT INTO empleados VALUES ...--ilega.l,est en un if

    GOTO insertar_fila;IF _.. THEN

    L.__. ._. _. _

    END;GOTO insertar_fila;END;

    insertar_filaBEGIN

    INSERT INTO empleados VALUES

    BEGINTambin es posible:

    I BEG:~::~~~:~:~~~~::~:"__--_-!rBE~:i IN ~~".~~--:~~~--""-"---".-_._-_--_.-'-_._-'--'--.-....----.-.i ,i insertar_fila ;: GOTO fin_loop;i INSERT INTO emplea.dosVALUES ';END; ,1 fin_loop --ilegal, no hay instrucciones ejecutables

    END LOOP;

    Desde una excepcin no se puede pasar el control del programa a una etiqueta queest en otra seccin deL mismo bloque.

    La etiqueta no puede estar dentro de un IF, de un LOOPni de un SUB-BLOQUEinter-nos al bloque donde se produce la llamada.

    La etiqueta debe preceder a un bloque o a un conjunto de rdenes ejecutables.

    No puede haber otra etiqueta en el entorno actual con el mismo nombre.

    En PL/SQL se puede usar la instruccin GOilO etiCiJl!..ne~aa Para poder utilizar esta orden sedeben cumplir las siguientes condiciones: