我得到了以下程序:
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;
如您所见,定义了几个参数。我的问题是,如何使用多个输入执行此过程?
答案 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中创建索引之类的对象是不常见的,因为它们应该在创建或更新模式时构建一次,因此将其作为可重用代码似乎有点无意义。