Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 创建一个包含三个名为proc 1等公共过程的包_Oracle_Plsql - Fatal编程技术网

Oracle 创建一个包含三个名为proc 1等公共过程的包

Oracle 创建一个包含三个名为proc 1等公共过程的包,oracle,plsql,Oracle,Plsql,我应该解决以下问题: 创建一个名为hellofrom的包,其中包含三个名为proc_1、proc_2和proc_3的公共过程。这些过程中的每一个都应该使用DBMS_OUTPUT.PUT_LINE()来显示消息“Hello from Proc x”,其中“x”是1或2或3,视情况而定 另外,proc_1应该调用proc_2,proc_2应该调用proc_3,因此您需要包括proc_1对proc_2的引用,以及proc_2对proc_3的引用 我编写了以下代码: CREATE OR REPLACE

我应该解决以下问题:


创建一个名为hellofrom的包,其中包含三个名为proc_1、proc_2和proc_3的公共过程。这些过程中的每一个都应该使用DBMS_OUTPUT.PUT_LINE()来显示消息“Hello from Proc x”,其中“x”是1或2或3,视情况而定

另外,proc_1应该调用proc_2,proc_2应该调用proc_3,因此您需要包括proc_1对proc_2的引用,以及proc_2对proc_3的引用

我编写了以下代码:

CREATE OR REPLACE PACKAGE BODY hellofrom IS
   PROCEDURE proc_1  ---public procedure
     (p_hello_1  IN VARCHAR2)
   IS   v_sec_hello   VARCHAR2;   --LOCAL VARIABLE
   BEGIN
       DBMS_OUTPUT.PUT_LINE(proc_1: 'Hello from Proc 1');
   END hello_1;

   PROCEDURE proc_2  ---public procedure
       (p_hello_2   IN VARCHAR2)
   IS    v_thd_hello   VARCHAR2;   --LOCAL VARIABLE 
   BEGIN
        DBMS_OUTPUT.PUT_LINE(proc_2: 'Hello from Proc 2');
   END hello_2;

   PROCEDURE proc_3    ---public procedure
        (p_hello_3    IN  VARCHAR2)
   IS      v_sec_hello        --LOCAL VARIABLE
   BEGIN
         DBMS_OUTPUT.PUT_LINE(proc_3: 'Hello from Proc_3');
   END hello_3;
但当我执行它时,我得到一个错误:

Error at line 23: PLS-00103: Encountered the symbol "end-of-file" 
    when expecting one of the following:

    begin function pragma procedure
为什么会出现此错误以及如何解决它? 对于 现在我为问题的这一部分编写了一个代码:另外,proc_1应该调用proc_2,proc_2应该调用proc_3,所以您需要包括proc_1对proc_2的引用,以及proc_2对proc_3的引用。这就是我所拥有的:

创建或替换包体hellofrom是 函数调用\u proc——私有函数 (p_proc_1 VARCHAR2, p_proc_2 VARCHAR2, p_程序3(VARCHAR2) 返回VARCHAR2是 开始 如果p_proc_1那么 DBMS_OUTPUT.PUT_LINE('Hello from Proc_2'); 如果p_proc_2 DBMS_OUTPUT.PUT_行('Hello from Proc_3'); 否则
DBMS_OUTPUT.PUT_LINE('Hello'); 如果结束; 结束呼叫程序; 程序程序1 是 开始 DBMS_OUTPUT.PUT_行('Hello from Proc 1'); 结束程序1

PROCEDURE proc_2
IS
BEGIN
   DBMS_OUTPUT.PUT_LINE('Hello from Proc 2');
END proc_2;

PROCEDURE  proc_3
IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello from Proc 3');
END proc_3;
地狱尽头

这就是我们要回来的。 第33行错误:PLS-00103:在预期以下情况之一时遇到符号“END”:

开始函数pragma过程

  • 创建或替换包体hellofrom是
  • 函数调用\u proc——私有函数
  • (p_proc_1 VARCHAR2
  • p_proc_2 VARCHAR2
  • p_程序3(VARCHAR2)

  • 我想我在里面放了一个函数。不确定错误是什么。

    您的代码缺少包体的结束行:

    END hellofrom;
    
    但它仍然无法编译,因为对
    DBMS\u OUTPUT.PUT\u LINE
    的每次调用都不正确。而不是

    DBMS_OUTPUT.PUT_LINE(proc_1: 'Hello from Proc 1');
    
    他们应该阅读

    DBMS_OUTPUT.PUT_LINE('Hello from Proc 1');
    
    把这三个都修好,你就可以上路了


    祝你好运。

    过程不需要任何参数,也不需要使用局部变量来删除它们。你只是有一个包体,没有任何规格-你需要一个。
    END
    语句后的过程名称与签名中的名称不匹配。您需要更正
    DBMS\u OUTPUT.PUT\u LINE
    语句中的语法错误

    您还需要从
    proc_1
    调用
    proc_2
    ,从
    proc_2
    调用
    proc_3
    。。。但这是你的家庭作业,所以你可以完成

    请记住,当您提交时,您需要添加一个指向您使用的答案的属性链接(根据许可证的要求)

    Oracle 11g R2架构设置

    CREATE OR REPLACE PACKAGE hellofrom IS
       PROCEDURE proc_1;
       PROCEDURE proc_2;
       PROCEDURE proc_3;
    END;
    /
    CREATE OR REPLACE PACKAGE BODY hellofrom IS
       PROCEDURE proc_1
       IS
       BEGIN
           DBMS_OUTPUT.PUT_LINE('Hello from Proc 1');
       END proc_1;
    
       PROCEDURE proc_2
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc 2');
       END proc_2;
    
       PROCEDURE proc_3
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc_3');
       END proc_3;
    END;
    /
    
    SELECT object_name, status FROM USER_OBJECTS
    
    | OBJECT_NAME | STATUS |
    |-------------|--------|
    |   HELLOFROM |  VALID |
    |   HELLOFROM |  VALID |
    
    查询1

    CREATE OR REPLACE PACKAGE hellofrom IS
       PROCEDURE proc_1;
       PROCEDURE proc_2;
       PROCEDURE proc_3;
    END;
    /
    CREATE OR REPLACE PACKAGE BODY hellofrom IS
       PROCEDURE proc_1
       IS
       BEGIN
           DBMS_OUTPUT.PUT_LINE('Hello from Proc 1');
       END proc_1;
    
       PROCEDURE proc_2
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc 2');
       END proc_2;
    
       PROCEDURE proc_3
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc_3');
       END proc_3;
    END;
    /
    
    SELECT object_name, status FROM USER_OBJECTS
    
    | OBJECT_NAME | STATUS |
    |-------------|--------|
    |   HELLOFROM |  VALID |
    |   HELLOFROM |  VALID |
    

    CREATE OR REPLACE PACKAGE hellofrom IS
       PROCEDURE proc_1;
       PROCEDURE proc_2;
       PROCEDURE proc_3;
    END;
    /
    CREATE OR REPLACE PACKAGE BODY hellofrom IS
       PROCEDURE proc_1
       IS
       BEGIN
           DBMS_OUTPUT.PUT_LINE('Hello from Proc 1');
       END proc_1;
    
       PROCEDURE proc_2
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc 2');
       END proc_2;
    
       PROCEDURE proc_3
       IS
       BEGIN
         DBMS_OUTPUT.PUT_LINE('Hello from Proc_3');
       END proc_3;
    END;
    /
    
    SELECT object_name, status FROM USER_OBJECTS
    
    | OBJECT_NAME | STATUS |
    |-------------|--------|
    |   HELLOFROM |  VALID |
    |   HELLOFROM |  VALID |
    

    你自己做作业!那么问题是什么呢?创建一个名为hellofrom的包,其中包含三个名为proc_1、proc_2和proc_3的公共过程。这些过程中的每一个都应该使用DBMS_OUTPUT.PUT_LINE()来显示消息“Hello from Proc x”,其中“x”是1或2或3,视情况而定。实际上,我收到了一条不同的错误消息,表明
    Proc_1:
    之后的第6行中不允许出现空白。我在livesql.oracle.com中使用SQL工作表