PLS-00306:错误调用中的参数数量或类型错误
Posted
技术标签:
【中文标题】PLS-00306:错误调用中的参数数量或类型错误【英文标题】:PLS-00306: wrong number or types of arguments in call to error 【发布时间】:2019-05-21 18:44:05 【问题描述】:调用过程时出现此错误。我正在尝试做这个练习。
创建一个名为 find_region_and_currency 的过程来获取和返回一个国家所在的货币和地区。 将 COUNTRY_NAME 作为 IN 参数传递,并使用用户定义的记录作为 OUT 参数,返回国家名称、地区和货币。
我从这里尝试了旧答案,但我没有这样做。你能帮帮我吗?
CREATE OR REPLACE PACKAGE traveler_assistance_package
IS
TYPE country_rec IS RECORD (
country_name COUNTRIES.COUNTRY_NAME%TYPE,
region COUNTRIES.REGION_ID%TYPE,
currency COUNTRIES.CURRENCY_CODE%TYPE);
PROCEDURE find_region_and_currency
(p_country_name IN COUNTRIES.country_name%TYPE,
p_country_rec OUT country_rec);
END traveler_assistance_package;
CREATE OR REPLACE package body traveler_assistance_package
IS
PROCEDURE find_region_and_currency
(p_country_name IN countries.country_name%TYPE,
p_country_rec OUT country_rec)
IS
BEGIN
SELECT country_name, region_id, currency_code INTO p_country_rec
FROM COUNTRIES
where COUNTRY_NAME = p_country_name;
DBMS_OUTPUT.PUT_LINE('Country Name:'||p_country_rec.country_name ||
'Region:' || p_country_rec.region ||
'Currency:' || p_country_rec.currency);
END;
END traveler_assistance_package;
【问题讨论】:
由于在您尝试调用该过程时会发生错误,因此显示执行调用的代码会很有帮助。 我正在调用这样的包裹“开始 traveler_assistance_package.find_region_and_currency('Republic of Bolivia'); end”,因为“Republic of Bolivia”是我的输入参数。然后我在调用“FIND_REGION_AND_CURRENCY”错误时得到错误数量或类型的参数。 嗯..这个过程有两个参数,你只传递一个。似乎错误的含义很清楚。 Littlefoot 的回答显示了如何使用两个参数调用过程的示例。 【参考方案1】:您没有发布问题所在(代码的哪一部分);不管怎样,给你。
示例表:
SQL> create table countries
2 (country_name varchar2(20),
3 region_id varchar2(20),
4 currency_code varchar2(20));
Table created.
SQL> insert into countries values ('Croatia', 'A', 'kn');
1 row created.
包装:
SQL> CREATE OR REPLACE PACKAGE traveler_assistance_package
2 IS
3 TYPE country_rec IS RECORD (
4 country_name COUNTRIES.COUNTRY_NAME%TYPE,
5 region COUNTRIES.REGION_ID%TYPE,
6 currency COUNTRIES.CURRENCY_CODE%TYPE);
7 PROCEDURE find_region_and_currency
8 (p_country_name IN COUNTRIES.country_name%TYPE,
9 p_country_rec OUT country_rec);
10 END traveler_assistance_package;
11 /
Package created.
包体:
SQL> CREATE OR REPLACE package body traveler_assistance_package
2 IS
3 PROCEDURE find_region_and_currency
4 (p_country_name IN countries.country_name%TYPE,
5 p_country_rec OUT country_rec)
6 IS
7 BEGIN
8 SELECT country_name, region_id, currency_code INTO p_country_rec
9 FROM COUNTRIES
10 where COUNTRY_NAME = p_country_name;
11
12 --dbms_output.put_line('Printing from FIND_REGION_AND_CURRENCY');
13 --DBMS_OUTPUT.PUT_LINE('Country Name:'||p_country_rec.country_name ||
14 -- ' Region:' || p_country_rec.region ||
15 -- ' Currency:' || p_country_rec.currency);
16 END;
17 END traveler_assistance_package;
18 /
Package body created.
测试:
SQL> set serveroutput on;
SQL> declare
2 l_out traveler_assistance_package.country_rec;
3 begin
4 traveler_assistance_package.find_region_and_currency ('Croatia', l_out);
5
6 dbms_output.put_line('Printing from anonymous PL/SQL block');
7 dbms_output.put_line(l_out.country_name ||', '|| l_out.currency);
8 end;
9 /
Printing from anonymous PL/SQL block
Croatia, kn
PL/SQL procedure successfully completed.
【讨论】:
像这样打电话 --> begin traveler_assistance_package.find_region_and_currency('Republic of Bolivia');然后我得到 ORA-06550: line 2, column 2: PLS-00306: wrong number or types of arguments in call to 'FIND_REGION_AND_CURRENCY' 当然。您声明它接受 两个 参数,但您只传递了一个(玻利维亚***)。您缺少 OUT 参数。 但我想用一个参数(玻利维亚***)调用并返回国家名称、地区和货币。这怎么可能?顺便说一句,谢谢你的帮助:) @ezgi:过程正在返回数据。只是,您似乎在拼命避免使用它。如您所见,Littlefoot 仅使用一个 IN 参数(玻利维亚***)调用它,并在 OUT 参数中获取所需的数据。如果由于某种原因您不想要 OUT 参数,则使该过程成为仅具有 IN 参数的函数并返回记录。然而,这并没有太大的区别。同样,您必须接受函数返回的内容。 事实是:您的作业说:“将 COUNTRY_NAME 作为 IN 参数传递,使用用户定义的记录作为 OUT 参数,返回国家名称等。”所以...顺便说一句,不客气。以上是关于PLS-00306:错误调用中的参数数量或类型错误的主要内容,如果未能解决你的问题,请参考以下文章
ORA-06550:PLS-00306: 调用中的参数数量或类型错误;ORA-06550:
PLS-00306:调用 'GET_LINE' 时参数的数量或类型错误。在 PL/SQL 中的函数中传递字符串参数时出现此错误
PLS-00306:调用“ADD_MONTHS”时参数的数量或类型错误