Plsql PL/SQL数组默认为空

Plsql PL/SQL数组默认为空,plsql,Plsql,我有一个带有html表单的plsql过程。提交调用并不总是传递所有变量的过程。我通常会为这些变量设置默认null,但默认null不适用于数组。是否有任何方法可以将数组默认为空或null以允许继续提交 procedure p_process( p_cc_no varchar2, p_pc_no pc_tm_no_vacant_array, --DEFAULT NULL?? p_tm_name name_title_array, --DEFAULT NULL?? p_tm_no

我有一个带有html表单的plsql过程。提交调用并不总是传递所有变量的过程。我通常会为这些变量设置默认null,但默认null不适用于数组。是否有任何方法可以将数组默认为空或null以允许继续提交

procedure p_process(
p_cc_no     varchar2,
p_pc_no     pc_tm_no_vacant_array, --DEFAULT NULL??
p_tm_name   name_title_array, --DEFAULT NULL??
p_tm_no     pc_tm_no_vacant_array, --DEFAULT NULL??
p_job_title name_title_array, --DEFAULT NULL??
p_status    status_hrs_shift_array, --DEFAULT NULL??
p_hrs_per_week  status_hrs_shift_array, --DEFAULT NULL??
p_shift     status_hrs_shift_array, --DEFAULT NULL??
p_open      open_delete_array, --DEFAULT NULL??
p_vacant    pc_tm_no_vacant_array, --DEFAULT NULL??
p_comments  long_array, --DEFAULT NULL??
p_delete    open_delete_array, --DEFAULT NULL??
p_orient    number default null,
p_ot        number default null,
p_buy       number default null) is

如果您的过程并非总是传递所有参数,则可以使用命名符号。 在命名表示法中,实际参数使用箭头符号(=>)与形式参数相关联。过程调用如下所示:

execute p_process(
p_cc_no     => 'AAA',
p_orient    => 20,
p_job_title => 'BOSS'
);
或者可以使用混合表示法(位置表示法应位于命名表示法之前):


在Internet上搜索“传递参数的PLSQL方法”。

您需要在PL/SQL包规范中定义一个从未赋值的变量

e、 g

然后,您可以在程序签名中参考这些:

procedure p_process(
p_cc_no     varchar2,
p_pc_no     pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_tm_name   name_title_array default arraytype_pkg.null_name_title,
p_tm_no     pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_job_title name_title_array default arraytype_pkg.null_name_title,
p_status    status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_hrs_per_week  status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_shift     status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_open      open_delete_array default arraytype_pkg.null_open_delete,
p_vacant    pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_comments  long_array default arraytype_pkg.null_long,
p_delete    open_delete_array default arraytype_pkg.null_open_delete,
p_orient    number default null,
p_ot        number default null,
p_buy       number default null) is

该过程似乎是包的一部分,因此您可以创建该过程的重载版本。一个版本将数组作为输入参数,而另一个版本则不会。根据输入参数,oracle将自动调用正确的过程。有时这个概念也被称为包装器

" 重载子程序名 PL/SQL允许您重载子程序名称和类型方法。您可以对几个不同的子程序使用相同的名称,只要它们的形式参数在数量、顺序或数据类型系列上不同。有关包中重载过程的示例,请参阅示例9-3。”

create package arraytype_pkg is
  null_pc_tm_no_vacant pc_tm_no_vacant_array;
  null_name_title name_title_array;
  ... etc. ...
end;
procedure p_process(
p_cc_no     varchar2,
p_pc_no     pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_tm_name   name_title_array default arraytype_pkg.null_name_title,
p_tm_no     pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_job_title name_title_array default arraytype_pkg.null_name_title,
p_status    status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_hrs_per_week  status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_shift     status_hrs_shift_array default arraytype_pkg.null_status_hrs_shift,
p_open      open_delete_array default arraytype_pkg.null_open_delete,
p_vacant    pc_tm_no_vacant_array default arraytype_pkg.null_pc_tm_no_vacant,
p_comments  long_array default arraytype_pkg.null_long,
p_delete    open_delete_array default arraytype_pkg.null_open_delete,
p_orient    number default null,
p_ot        number default null,
p_buy       number default null) is