执行存储过程 - Oracle PL SQL
Posted
技术标签:
【中文标题】执行存储过程 - Oracle PL SQL【英文标题】:Executing Stored Procedure - Oracle PL SQL 【发布时间】:2015-11-17 18:51:35 【问题描述】:我目前正在尝试在 Oracle PL SQL 中执行存储过程。我一直在执行下面遇到同样的错误。
我尝试过两次执行都出现相同的错误 设置服务器输出; EXEC get_phone(200.00,500.00);
或
SET SERVEROUTPUT ON;
DECLARE
c_minprice products.price%type;
c_maxprice products.price%type;
BEGIN
c_minprice := get_phone(200);
c_maxprice := get_phone(500);
END;
ERROR from executing the above:
c_minprice := get_phone(200);
*
ERROR at line 5:
ORA-06550: line 5, column 15:
PLS-00306: wrong number or types of arguments in call to 'GET_PHONE'
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored
ORA-06550: line 6, column 15:
PLS-00306: wrong number or types of arguments in call to 'GET_PHONE'
ORA-06550: line 6, column 1:
PL/SQL: Statement ignored
****Sample Snip-its form my code:
CREATE OR REPLACE PROCEDURE get_phone
(
c_minprice IN products.price%type,
c_maxprice IN products.price%type,
i_result OUT VARCHAR2
) AS
--Checking if starting price range is valid or not
IF c_minprice IS NULL THEN
i_result := 'Starting price range should be valid and cannot be empty';
RAISE V_MINPRICE; -- Raising exception if starting price is null
END IF;
--Checking if end price range is valid or not
IF c_maxprice IS NULL THEN
i_result := 'End price range should be valid and cannot be empty';
RAISE V_MAXPRICE; -- Raising exception if end price is null
END IF;
【问题讨论】:
【参考方案1】:你的过程需要三个参数,所以你必须传入三个参数
DECLARE
l_result varchar2(100);
BEGIN
get_phone( 200, 500, l_result );
END;
/
应该可以。当然,您的程序似乎毫无意义。如果目标只是返回一个结果,那么您真的应该使用函数而不是带有out
参数的过程。
【讨论】:
谢谢贾斯汀。这行得通……我同意你的看法。我可能会考虑使用一个函数来解决这个问题。【参考方案2】:get_phone 需要 3 个参数,c_minprice、c_maxprice 和 i_result。你只传递一个数字。将其余参数传递给它。
【讨论】:
这就是我试图遇到问题的地方 --- 我添加了最低价格和最高价格。当我只希望它在最小和最大价格范围之间的产品时,为什么我需要添加结果。例如,我将 I_result 用于以下内容: --检查起始价格范围是否有效 IF c_minprice IS NULL THEN i_result := '起始价格范围应该有效且不能为空';提高 V_MINPRICE; -- 如果起始价格为空则引发异常 END IF; 设置服务器输出;声明 c_minprice products.price%type; c_maxprice products.price%type;开始 c_minprice := get_phone(200); c_maxprice := get_phone(500);结束; 使用额外的完整信息更新您的原始帖子。由于没有格式,注释部分不是代码的地方。 我已经在我的帖子中进行了适当的编辑。谢谢以上是关于执行存储过程 - Oracle PL SQL的主要内容,如果未能解决你的问题,请参考以下文章