首页 文章

使用Oracle创建包时出错PLS-00103

提问于
浏览
-1

我正在尝试使用oracle创建包,虽然我已经在docs oracle中阅读了许多示例并且在本教程中构建了相同的代码,但我仍然对此进行了错误 . 以下代码:

create table manage_emplyee
(
    f_name varchar(20),
    l_name varchar(20)
);

// Specification

create or replace package fn2
    as
        procedure manage_emplyee(v_fname in VARCHAR2, v_lname in VARCHAR2);
        procedure manage_emplyee_delete(v_fname in VARCHAR2);
    end;
/

create or replace package body fn2 
as
    --Procedure Implementation 
procedure manage_emplyee(v_fname in VARCHAR2, v_lname in VARCHAR2)
is
begin
    insert into manage_emplyee VALUES (v_lname, v_lname);
end manage_emplyee;


// body

procedure manage_emplyee_delete (v_fname in VARCHAR2)
is
begin
    delete manage_emplyee where v_fname =  v_fname;
end manage_emplyee_delete;

end fn2;
/

错误

PLS-00103:遇到以下其中一项时遇到符号“文件结束”:开始结束函数编译指示程序

请帮我解决,非常感谢!

1 回答

  • 0

    有很多不正确的东西,所以这是一个正确的版本 .

    首先运行表脚本 -

    create table manage_emplyee
    (
        f_name varchar(20),
        l_name varchar(20)
    );
    

    之后运行Spec脚本

    create or replace package fn2
    as
        procedure manage_emplyee(v_fname  VARCHAR2,
                                 v_lname  VARCHAR2);
        procedure manage_emplyee_delete(v_fname  VARCHAR2);
    end;
    /
    

    之后运行body脚本

    create or replace package  body fn2 
    as
    
        procedure manage_emplyee(v_fname  VARCHAR2, v_lname  VARCHAR2)
        is
        begin
            insert into manage_emplyee VALUES (v_lname, v_lname);
        end ;
    
        procedure manage_emplyee_delete (v_fname  VARCHAR2)
        is
        begin
            delete from manage_emplyee where f_name =  v_fname;
        end ;
     end;
    /
    
    • 从table_name删除的语法不正确 .

    • 我确定,您希望将表中的f_name与输入变量中的v_fname匹配以删除数据 . 之前您在代码中将v_fname与v_fname匹配,这将始终为true(除非它传递NULL)并且最终会丢失所有测试数据

    *注意 - 不需要显式添加 IN ,PLSQL过程中的参数的默认类型是 IN

相关问题