0

我正在尝试创建一个接受 aVARRAY作为参数并从表中删除一些记录的过程。以下是我遵循的步骤:

步骤1

创建了VARRAY内部包:

create or replace package del_emp is
type rec_del_emp is varray(10) of NUMBER;
end del_emp;

第2步:

创建过程:

create or replace procedure f_del_emp(v_emp del_emp.rec_del_emp%type) is
begin
for i in 1 .. v_emp.count
loop
    delete from emp where emp_id = v_emp(i);
    dbms_output.put_line('Deleted Id: ' || v_emp(i));
end loop;
commit;
end f_del_emp;

创建此过程时出现编译错误。

我尝试使用此检查错误是什么:

select * from SYS.USER_ERRORS 
where NAME = 'f_del_emp' 
and type = 'PROCEDURE';

但它给出了:没有选择行

我对此有两个问题:

1) 创建过程/函数时如何检查错误?我是否使用了正确的查询来检查错误?(需要知道这一点,以便每次我遇到错误时,我都不需要有人在这里代表我检查)

2) 上述程序的错误在哪里?

请让我知道这些。

4

2 回答 2

3

对象名称默认不区分大小写,但在数据字典中以大写形式存储;所以您的查询需要是:

select * from SYS.USER_ERRORS 
where name = 'F_DEL_EMP' 
and type = 'PROCEDURE';

(虽然使用f_作为过程而不是函数的前缀似乎有点奇怪)。

show errors如果您在 SQL*Plus 或 SQL Developer 中创建它,您也可以这样做。

至于你的程序有什么问题,我可以立即看到两个问题。rec_del_emp已经是一个类型,所以你不需要%type在参数声明中。而且您在构造中有空格for ... loop,我认为这会导致错误但现在无法检查:

create or replace procedure f_del_emp(v_emp del_emp.rec_del_emp) is
begin
for i in 1..v_emp.count
loop
...
于 2013-06-16T10:46:53.967 回答
3
create or replace package del_emp is
type rec_del_emp is varray(10) of NUMBER;
end del_emp;
-- PACKAGE DEL_EMP compiled

create or replace procedure f_del_emp(v_emp del_emp.rec_del_emp%type) is
begin
for i in 1 .. v_emp.count
loop
    delete from emp where emp_id = v_emp(i);
    dbms_output.put_line('Deleted Id: ' || v_emp(i));
end loop;
commit;
end f_del_emp;
/*
PROCEDURE F_DEL_EMP compiled
Errors: check compiler log
*/

SHOW ERRORS;
/*
1/27           PLS-00206: %TYPE must be applied to a variable, column, field or attribute, not to "DEL_EMP.REC_DEL_EMP"
0/0            PL/SQL: Compilation unit analysis terminated
*/

create or replace procedure f_del_emp(v_emp del_emp.rec_del_emp) is
begin
    for i in 1 .. v_emp.count
    loop
        EXECUTE IMMEDIATE 'delete from emp where emp_id = ' || v_emp(i);
        dbms_output.put_line('Deleted Id: ' || v_emp(i));
    end loop;

    commit;
end f_del_emp;
-- PROCEDURE F_DEL_EMP compiled
于 2013-06-16T10:49:20.280 回答