这是关于使用过程维护详细信息。有人可以使用存储过程帮助我解决这个问题吗?我是 plsql 的初学者



要求使用存储过程创建一个表来维护详细信息。我需要使用过程来创建表还是需要使用过程来插入值?

  1. 使用存储过程创建表来维护公司详细信息通过传递公司id和名称作为输入参数。

    tbody> <<tr>
    公司编号 公司名称
    COMP_A公司
    COMP_B公司B

    从PL/SQL创建表是可能的-为此您需要动态SQL。但是,您应该避免它,因为这只是坏实践:在SQL级别创建表,然后编写一个过程来操作存储在

    中的数据:
    create table some_name (id number, name varchar2(20));
    create or replace procedure p_some_proc (par_id in number, par_name in varchar2)
    is
    begin
    insert into some_name (id, name) values (par_id, par_name);
    end;
    /
    begin
    p_some_proc(par_id => 1, par_name => 'Littlefoot');
    end;
    /
    

    如果你想在一个过程中创建表,那么你可以

    create or replace procedure p_some_proc as
    begin
    execute immediate 'create table some_name (id number, name varchar2(20))';
    end;
    /
    begin
    p_some_proc;
    end;
    /
    

    注意,如果table已经存在,这样的过程在每次调用时都会失败,因此必须处理异常。不是说不可能,而是——那不是做这件事的方法。

    我需要使用一个过程来创建表还是我需要使用一个过程来插入值?

    家庭作业的问题措辞很糟糕,你应该和你的老师确认他们的意图。

    最佳做法是:

    1. 先用CREATE TABLE语句创建表
    2. 使用CREATE PROCEDURE语句创建过程,并在过程体中INSERT将值放入表中。
    3. 使用一个匿名PL/SQL块来调用带有需要插入值的过程。

    虽然在技术上可以在过程内的EXECUTE IMMEDIATE内使用CREATE TABLE语句,但这是不好的做法,如果您这样做了,那么您还需要将INSERT语句包装在它们自己的EXECUTE IMMEDIATE语句内(否则该过程将无法编译,因为您试图引用在过程编译时不存在的表)。当你开始这样做时,它就会级联,所有的东西都必须包含在动态调用的SQL语句中,你失去了所有编译时类型检查的好处,所有的错误都将在运行时发生(这成为调试的噩梦)。

最新更新