执行错误 (22:7):ORA-06550
Error Execution (22: 7): ORA-06550
你好我是学生,我是 oracle 的新手,我正在尝试一些事情,但是这个过程有问题,我没有找到 it.I 希望你能帮助我提前谢谢你..
错误消息:
[错误] 执行 (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');
您遗漏了该过程的一个参数。您定义了 3,但在 EXEC 语句中只指定了 2。
您正在将 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;
移除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;
我解决了这样的问题,感谢所有想帮助我的人..
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;
你好我是学生,我是 oracle 的新手,我正在尝试一些事情,但是这个过程有问题,我没有找到 it.I 希望你能帮助我提前谢谢你..
错误消息: [错误] 执行 (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');
您遗漏了该过程的一个参数。您定义了 3,但在 EXEC 语句中只指定了 2。
您正在将 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;
移除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;
我解决了这样的问题,感谢所有想帮助我的人..
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;