Esta es una pregunta acerca de una pequeña parte de un gran proyecto que estoy haciendo. He intentado lo siguiente, pero me acaba de llegar los dos errores de abajo:

SET SERVEROUTPUT ON

CREATE OR REPLACE PROCEDURE HELLO AS
DECLARE
variable1 NUMBER(1);
variable2 CHAR(1);

BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
variable1 := &please_enter_1_or_0;
variable2 := &please_enter_y_or_n;
END;
/

De Error(2,5): PLS-00103: se Encontró con el símbolo de «DECLARAR» cuando se esperaba
uno de los siguientes: función de inicio pragma procedimiento subtipo tipo
actual
cursor borrar existe antes de idioma externos El símbolo «comenzar», fue
sustituido por «DECLARAR» para continuar.

De Error(10,8): PLS-00103: se Encontró con el símbolo de «fin de archivo» cuando
esperando que uno de los siguientes: ( comenzar caso de declarar el fin de la excepción
exit for goto if loop mod null pragma aumentar el retorno seleccione actualizar
mientras que con

<< continuar cerca de la actual eliminar captura de bloqueo

insertar abrir la reversión punto de retorno conjunto de sql ejecutar commit forall de mezcla
tubería de purga

Nos dieron un esquema de calificación de cómo nuestro código sería marcado, y para esta sección, los criterios pertinentes serían:
«¿ La secuencia de comandos uso de un procedimiento?» y
«¿ La secuencia de comandos de petición para bien/mal y equipo/individual y manejar la información proporcionada correctamente?».

El resumen del proyecto comillas «Desarrollar un procedimiento que pide bien/MAL (con &), a continuación, actualiza la tabla» (donde tabla es el nombre de una tabla

El propósito de las variables fue actualizar un registro existente atributo. es decir, si el usuario eligió 1 y n, a continuación, actualizar el valor null en el registro a 2. si era 1 y y, a continuación, actualizar a 1, y si es 0 y s/n, a continuación, actualizar a 0

  • PL/SQL, no maneja las interacciones del usuario cuando se ejecuta en el RDBMS, por lo tanto usted debe primero obtener los parámetros de una manera diferente, a continuación, pasar al procedimiento o bloque anónimo a través de la unión. Las interacciones de los usuarios deben ser manipulados por el cliente o un nivel medio de la arquitectura.
  • Una cosa más el & símbolo es aceptada sólo por SQL*Plus que preprocesa la declaración y hace que las sustituciones necesarias antes de enviar el código con los valores sustituidos para el RDBMS. Pregunte a sus colegas a contribuir en la búsqueda de información sobre ella. De este lado del servidor de la programación puede ser bastante feo a la cara por un novato. Cuenta que una vez que el PL/SQL comenzó no son fáciles maneras de interactuar, y siempre es mejor evitar hacerlo.
InformationsquelleAutor user3120554 | 2015-09-13

4 Comentarios

  1. 6

    PL/SQL es un lenguaje para escribir autónomo programas. No está diseñado para la interactividad con el usuario. Los valores de entrada se pasan como parámetros.
    Así que tu programa debe tener este aspecto

    CREATE OR REPLACE PROCEDURE HELLO
        (p1 in number
          , p2 in varchar2)
    AS
        l_salutation varchar2(20) := 'Hello World';
    BEGIN
        DBMS_OUTPUT.PUT_LINE(l_salutation);
        DBMS_OUTPUT.PUT_LINE('p1 = ' || p1);
        DBMS_OUTPUT.PUT_LINE('p2 = ' || p2);
    END;
    /

    Nota no es necesario DECLARAR el nombre del Procedimiento. La sección entre COMO y COMENZAR es para la declaración de variables, como yo he hecho con l_salutation.

    Puede proporcionar los valores de los parámetros al invocar el programa. En SQL*Plus funcionaría como este:

    SET SERVEROUTPUT ON
    
    accept p1 prompt "please enter 1 or 0: "
    accept p2 prompt "please enter Y or N: "
    
    exec HELLO (:p1, :p2)
    • De alguna manera que no funcionó para mí, he tenido que utilizar exec HELLO (&p1, &p2) en mi caso, de lo contrario, hubo problemas con la unión.
  2. 2

    Esta pieza de código sólo funciona en SQL*Plus y no puede utilizarse para producir un procedimiento almacenado!!!

    DECLARE
    variable1 NUMBER(1);
    variable2 CHAR(1);
    
    BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello World');
    variable1 := &please_enter_1_or_0;
    variable2 := '&please_enter_y_or_n';
    END;

    Cuenta la diferencia en la última declaración donde la última variable de sustitución es citado en una cadena para ser debidamente aceptado por el código PL/SQL sintaxis. De todos modos, como te dije en el último comentario a tu pregunta esta no es una interacción del usuario, pero no sólo es el resultado de una declaración de preprocesamiento. Cada vez que la entrada de los diferentes valores de los RDBMS ejecuta diferente código fuente.

    Probablemente su requisito de uso de un «procedimiento» no significaba para utilizar un procedimiento ALMACENADO(que es imposible hacerlo), sino que sólo la intención de SQL*Plus script, pedir aclaraciones.

    • Gracias por el comentario. Pido disculpas por mi inexperiencia, todavía estoy aprendiendo PL/SQL. Puede ser la razón de mi falta de comprensión. Nos dieron un esquema de calificación de cómo nuestro código sería marcado, y para esta sección, el criterio relevante sería: «¿ la secuencia de comandos uso de un procedimiento?» y «¿la secuencia de comandos de petición para bien/mal y equipo/individual y manejar la información proporcionada correctamente?». El resumen del proyecto comillas «Desarrollar un procedimiento que pide bien/MAL (con &), a continuación, actualiza la tabla» (donde tabla es el nombre de una tabla que tengo)
  3. 1

    No puede recibir directamente los mensajes desde el cliente en un PL/SQL o procedimiento paquete.

    El mejor que usted puede hacer para emular esta es la interfaz con los datos de la tabla, y hacer que los usuarios insertar datos en la tabla y reaccionar a eso, o el uso Avanzado de la formación de Colas (lo que equivale a casi la misma cosa).

    Alternativamente, aceptar la entrada del usuario, como parámetros cuando se llama al procedimiento.

    • No estoy muy seguro de qué hacer. Tengo un requisito para el uso de un «procedimiento». Tu sugerencia, mientras que los grandes, parece ir más allá de los contenidos de mi formación. Que importa, el propósito de las variables fue actualizar un registro existente atributo. es decir, si el usuario eligió 1 y y, a continuación, actualizar null en el registro de a 2. si era 1 y n, a continuación, actualizar a 1, ad si 0 y s/n, a continuación, actualizar a 0
    • Usted simplemente no puede interactuar con el usuario para solicitar de ellos, pero usted puede aceptar parámetros como parte de la llamada de procedimiento , por lo que el procedimiento sería llamado como: hola, ( 1 , ‘Y’ )
  4. 0

    Usted puede simplemente Eliminar la declara remedio que ora error

    • He quitado declarar y ejecutar el script. Recibí el mensaje de que fue compilado, pero tuvo errores: Error(9,5): PL/SQL: Declaración de ignorados. Error(9,18): PLS-00201: identificador ‘Y’ debe ser declarado

Dejar respuesta

Please enter your comment!
Please enter your name here