要求使用存储过程创建一个表来维护详细信息。我需要使用过程来创建表还是需要使用过程来插入值?
使用存储过程创建表来维护公司详细信息通过传递公司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已经存在,这样的过程在每次调用时都会失败,因此必须处理异常。不是说不可能,而是——那不是做这件事的方法。
我需要使用一个过程来创建表还是我需要使用一个过程来插入值?
家庭作业的问题措辞很糟糕,你应该和你的老师确认他们的意图。
最佳做法是:
- 先用
CREATE TABLE
语句创建表- 使用
CREATE PROCEDURE
语句创建过程,并在过程体中INSERT
将值放入表中。- 使用一个匿名PL/SQL块来调用带有需要插入值的过程。
虽然在技术上可以在过程内的
EXECUTE IMMEDIATE
内使用CREATE TABLE
语句,但这是不好的做法,如果您这样做了,那么您还需要将INSERT
语句包装在它们自己的EXECUTE IMMEDIATE
语句内(否则该过程将无法编译,因为您试图引用在过程编译时不存在的表)。当你开始这样做时,它就会级联,所有的东西都必须包含在动态调用的SQL语句中,你失去了所有编译时类型检查的好处,所有的错误都将在运行时发生(这成为调试的噩梦)。