错误执行(22:7):ORA-06550

时间:2015-03-28 23:54:01

标签: oracle plsql oracle11g

你好我是学生,我是oracle的新人,我尝试了一些事情,但是对这个程序有疑问,我没有找到它的位置。我希望你能帮助我,提前谢谢你..

错误消息: [错误]执行(23:7):ORA-06550:第1行第7列: PLS-00306:调用' URUNNOGEN'中的参数数量或类型错误 ORA-06550:第1行第7列: PL / SQL:忽略语句

create or replace procedure ariciaykut.URUNNOGEN
(KATA in NVARCHAR2,MARK in NVARCHAR2,URNO out NVARCHAR2)as 
K NVARCHAR2(3);
M NVARCHAR2(3);
U NUMBER;
BEGIN
K:=KATA;
M:=MARK;
U:=0;
    FOR U IN 1..999 LOOP
        IF U BETWEEN '-1'AND'10' THEN
            URNO:=K||'00'||U||M;
        ELSIF U BETWEEN '9'AND'99' THEN
            URNO:=K||'0'||U||M;
        ELSE
            URNO:=K||U||M;
            INSERT INTO ARICIAYKUT.PROGOSTER VALUES(URNO);
        END IF;
    END LOOP;
END;

致电热线:

EXEC ARICIAYKUT.URUNNOGEN('ICK','COC');

4 个答案:

答案 0 :(得分:1)

您错过了该程序的一个参数。您定义3,但仅在EXEC语句中指定2。

答案 1 :(得分:0)

您正在将U中的数值与字符串('-1', '10'等)进行比较。这很可能最终会做一些你不想要的事情。您还指望数字到字符的默认转换符合您的预期;你可能会感到惊讶此外,您对变量和循环控制值使用了相同的名称(U),这可能会引起一些混淆。 (循环U内部将引用循环控制值;循环U外部将引用变量)。我建议你重新编写程序,将数字与数字进行比较,并使用TO_CHAR函数将数字转换为字符串,类似于以下内容:

create or replace procedure ariciaykut.URUNNOGEN
    (KATA in NVARCHAR2,MARK in NVARCHAR2,URNO out NVARCHAR2)
as 
    K NVARCHAR2(3);
    M NVARCHAR2(3);
BEGIN
    K:=KATA;
    M:=MARK;

    FOR U IN 1..999 LOOP
        URNO := K || TO_CHAR(U, '009') || M;

        IF U >= 100 THEN
            INSERT INTO ARICIAYKUT.PROGOSTER VALUES(URNO);
        END IF;
    END LOOP;
END URUNNOGEN;

分享并享受。

答案 2 :(得分:0)

删除out变量并声明为局部变量

create or replace procedure ariciaykut.URUNNOGEN
(KATA in NVARCHAR2,MARK in NVARCHAR2)as 
K NVARCHAR2(3);
M NVARCHAR2(3);
U NUMBER;
Urno nvarchar2(100);
BEGIN
K:=KATA;
M:=MARK;
U:=0;
FOR U IN 1..999 LOOP
    IF U BETWEEN -1 AND 9 THEN
        URNO:=K||'00'||U||M;
    ELSIF U BETWEEN 9 AND 99 THEN
        URNO:=K||'0'||U||M;
    ELSE
        URNO:=K||U||M;
END IF;
        INSERT INTO ARICIAYKUT.PROGOSTER VALUES(URNO);

END LOOP;
END;

答案 3 :(得分:0)

我解决了这样的问题并感谢所有想帮助我的人..

create or replace procedure ariciaykut.URUNNOGEN2 (KATA in NVARCHAR2,MARK in NVARCHAR2)as 
K NVARCHAR2(3);
M NVARCHAR2(3);
U NUMBER;
BEGIN
K:=KATA;
M:=MARK;
    FOR U IN 1..999 LOOP
        IF U BETWEEN '-1'AND'9' THEN
           INSERT INTO ARICIAYKUT.PROGOSTER VALUES(K||'00'||U||M);
        ELSIF U BETWEEN '9'AND'99' THEN
            INSERT INTO ARICIAYKUT.PROGOSTER VALUES(K||'0'||U||M);
        ELSE
            INSERT INTO ARICIAYKUT.PROGOSTER VALUES(K||U||M);
        END IF;
    END LOOP;
END;