尝试运行oracle存储过程时PLS-00306

时间:2014-01-25 16:53:27

标签: oracle plsql sqlplus

我对此有点新意,请原谅我,如果我在这里弄得一团糟。 我创建了以下过程 -

create or replace procedure perform_trade
(p_trade_id number,
p_trade_amount number,
p_balances_id number,
v_out_random_coinid out number,
v_out_random_userid out number,
v_out_random_tradetype out varchar2,
v_out_current_balance out number
)
IS
BEGIN
SELECT ID into v_out_random_coinid from
(SELECT ID
FROM SQL_COINS_VIEW
ORDER BY dbms_random.value)
WHERE rownum = 1;
SELECT ID into v_out_random_userid from
(SELECT ID
FROM USERS
ORDER BY dbms_random.value)
WHERE rownum = 1;
SELECT TYPE into v_out_random_tradetype from
(SELECT TYPE
FROM TRADETYPES
ORDER BY dbms_random.value)
WHERE rownum = 1;
SELECT AMOUNT into v_out_current_balance from
BALANCES
WHERE USERID=v_out_random_userid
and COINID=v_out_random_coinid;
Insert into COINTRADER.trades (ID,USERID,COINID,AMOUNT,ACTIONTYPE,RATE)
Values (p_trade_id, v_out_random_userid, v_out_random_coinid, p_trade_amount, v_out_random_tradetype, (select value from SQL_COINS_VIEW where id=v_out_random_coinid ));
Commit;
Insert into COINTRADER.balances
Values (p_balances_id, v_out_random_userid, v_out_random_coinid, v_out_current_balance+(select total from trades where id=p_trade_id  ));
Commit;
End;

并尝试通过PL / SQL开发人员以这种方式运行它 -

DECLARE
v_num NUMBER:=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(v_num);
v_num := v_num + 1;
perform_trade
(TRADES_ID_SEQ.NEXTVAL,
DBMS_RANDOM.VALUE(1, 10),
BALANCES_ID_SEQ.NEXTVAL);
DBMS_LOCK.SLEEP(1);
EXIT WHEN v_num > 5;
END LOOP;
END;

但是我得到了这个错误 -

Error starting at line 45 in command:
DECLARE
v_num NUMBER:=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(v_num);
v_num := v_num + 1;
perform_trade
(TRADES_ID_SEQ.NEXTVAL,
DBMS_RANDOM.VALUE(1, 10),
BALANCES_ID_SEQ.NEXTVAL);
DBMS_LOCK.SLEEP(1);
EXIT WHEN v_num > 5;
END LOOP;
END;
Error report:
ORA-06550: line 7, column 1:
PLS-00306: wrong number or types of arguments in call to 'PERFORM_TRADE'
ORA-06550: line 7, column 1:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

有人可以告诉我出了什么问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的out变量不存在于调用该过程的语句中。应该像

perform_trade
(TRADES_ID_SEQ.NEXTVAL,
DBMS_RANDOM.VALUE(1, 10),
BALANCES_ID_SEQ.NEXTVAL,
v_out_random_coinid ,
v_out_random_userid ,
v_out_random_tradetype,
v_out_current_balance);
相关问题