如何创建带参数的 Oracle 存储过程?

Posted

技术标签:

【中文标题】如何创建带参数的 Oracle 存储过程?【英文标题】:How to create an Oracle stored procedure with a parameter? 【发布时间】:2015-03-24 16:45:09 【问题描述】:

我是 SQL 新手,正在尝试在 Oracle 数据库中创建存储过程。 SPROC 需要两个日期参数(from_date 和 to_date)才能运行我的报告。也许我将此与 SQL Server 代码混淆了。

我的代码如下所示:

CREATE PROCEDURE uSP_RevPerSalesman

   @from_date DATE
   @to_date DATE

AS

BEGIN

SELECT DISTINCT
   C.CUSTOMER_CODE
 , MS.SALESMAN_NAME
 , SUM(C.REVENUE_AMT)

FROM
   C_REVENUE_ANALYSIS C
 , M_CUSTOMER MC
 , M_SALESMAN MS

WHERE
   C.CUSTOMER_CODE = MC.CUSTOMER_CODE AND
   MC.SALESMAN_CODE = MS.SALESMAN_CODE AND
   MC.COMP_CODE = 'W1' AND
   MS.COMP_CODE = '00' AND
   C.REVENUE_DATE >= :from_date AND 
   C.REVENUE_DATE <= :to_date

GROUP BY
   C.CUSTOMER_CODE, MS.SALESMAN_NAME

ORDER BY
   C.CUSTOMER_CODE

END

GO

我在运行此代码时收到一条错误消息。我得到的错误信息是:

ERROR ORA-00900: 无效的 SQL 语句

当我只运行 SELECT 代码时,它可以工作并给我正确的结果。我似乎无法将它变成 SPROC。

【问题讨论】:

【参考方案1】:

删除在 Oracle 中无效的 GO。请尝试在末尾使用分号或 /,具体取决于您在何处运行。

【讨论】:

感谢您回复巴雷特。我在最后删除了“GO”,但那是 NoGo。仍然是“无效的 SQL 语句”。 -- 我正在使用 MS Visual Studio 2012 Shell 来运行它。

以上是关于如何创建带参数的 Oracle 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中创建带参存储过程,传进去的参数可以为空么?在存储过程中要如何判断传进来的值是不是为空。

SQL Server 如何执行 带参数的 存储过程

oracle 存储过程中调用存储过程

SQL Server存储过程中使用表值作为输入参数示例

在oracle中 存储过程如何调用存储过程?

Oracle带输入输出参数的存储过程