具有多个IN参数的存储过程

时间:2013-11-19 09:33:14

标签: oracle oracle11g oracle10g

我得到了以下程序:

create or replace PROCEDURE create_indexes 
(tbl_name_index IN VARCHAR2, 
tbl_name_vehicle IN VARCHAR2, 
tbl_name_dealer IN VARCHAR2, 
tbl_name_hst IN VARCHAR2, 
tbl_name_dms IN VARCHAR2, 
tbl_name_usertype IN VARCHAR2, 
tbl_name_search IN VARCHAR2) as

  COUNT_INDEXES INTEGER;
BEGIN
  SELECT COUNT(*)
  INTO COUNT_INDEXES
  FROM USER_INDEXES
  WHERE table_name = tbl_name_index and index_name not like '%UNIQUE%';

  IF COUNT_INDEXES <= 0 THEN
         EXECUTE IMMEDIATE 'COMMAND';


    end If;
end;

如您所见,定义了几个参数。我的问题是,如何使用多个输入执行此过程?

1 个答案:

答案 0 :(得分:3)

从SQL工作表中,从anonymous block

调用您的过程
begin
  create_indexes (
    tbl_name_index    => 'TABLE_NAME',
    tbl_name_vehicle  => 'Vehicle name',
    tbl_name_dealer   => 'value 3',
    tbl_name_hst      => 'value 4',
    tbl_name_dms      => 'value 5',
    tbl_name_usertype => 'value 6',
    tbl_name_search   => 'value 7');
end;
/

正如Jeffrey Kemp所说,使用命名参数表示法是一个好主意,而不是位置表示法;它使它更清晰,有助于避免错误(特别是使参数的顺序错误),可以减少将来更改对过程的影响,并且当您使用默认值的参数时更灵活 - 所以你可以跳过任何你没有想要明确设置。

您也可以使用execute command作为快捷方式,但是有很多参数可能更容易坚持匿名阻止 - 无论如何它都是相同的。许多SQL * Plus文档也适用于SQL Developer。

SQL Developer文档也shows you how to execute and debug a procedure

如果这是您第一次涉足PL / SQL,则可能值得查看documentation。我不知道你在哪里使用你所展示的代码;它似乎有点困惑。在PL / SQL中创建索引之类的对象是不常见的,因为它们应该在创建或更新模式时构建一次,因此将其作为可重用代码似乎有点无意义。