plsql 同一个程序里调用存储过程调用不了是为什么

plsql 同一个程序里调用存储过程调用不了是为什么 ?如下
CREATE OR REPLACE PACKAGE BODY xx_test01 AS
PROCEDURE main (
    id NUMBER
) IS
    i    VARCHAR2(255);
    flag NUMBER(1) := 0;
    flag1 VARCHAR2(10) ;
    
CURSOR one01 IS
    SELECT
        name,
        id,
        sex,
        addr,
        shigoto
    FROM xx_test_wk ;
BEGIN
    FOR i IN one01 LOOP
        IF length(i.name) > 10 THEN
            flag := 1;
        END IF;
        
        IF i.id > 11111110 THEN
            NULL;
        END IF;

       -- IF i.SEX > 0 THEN
       --    FLAG := 1;
       -- END IF ;

        IF flag = 1 THEN
            NULL;
        ELSE
            -- INSERT01 (TRUE) ;       
            XX_TEST01.INSERT01 (TRUE) ; --这里调用了下面的procedure,但报错了
        END IF;

    END LOOP;
END;

PROCEDURE INSERT01 (flag1 VARCHAR2
)
IS
  BEGIN
           INSERT INTO xx_test (
                name,
                id,
                sex,
                addr,
                shigoto) 
            VALUES (
                i.name,
                i.id,
                i.sex,
                i.addr,
                i.shigoto
            );
 END ;

END xx_test01;

求解答,谢谢!

当然会报错,应该编译都是失败的,列举几个肉眼可见的问题

  1. INSERT01 过程的参数类型是个varchar2,但你调用的时候传了个true
  2. 游标i的作用域只在第一个过程的循环里,而你两个过程是独立的,第二个过程是认不到i的

用plsqldev去编译这个对象,然后查看它,工具会告诉你哪里写得不对