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过程
我想我在里面放了一个函数。不确定错误是什么。您的代码缺少包体的结束行:
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工作表