gravykun 2022-09-02 23:54 采纳率: 40%
浏览 34
已结题

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条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-09-04 00:33
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 赞助了问题酬金20元 9月3日
  • 修改了问题 9月3日
  • 展开全部