【问题标题】:Creating Stored Procedure compilation error创建存储过程编译错误
【发布时间】:2014-12-08 12:31:49
【问题描述】:

我正在尝试在 oracle 中创建一个存储过程,但每次我尝试将其添加到数据库中时,我都会收到错误消息 Procedure created with compilation errors

我无法执行它(也会出错)。我想我的实际程序有问题,但我无法弄清楚。这是我正在尝试创建的程序:

CREATE PROCEDURE SPBILL @CLIENT_ID VARCHAR2(6)
AS 
BEGIN
    SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST) AS INVOICE
    FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
    WHERE C.CLIENT_ID=B.CLIENT_ID
    AND R.ROOM_ID=B.ROOM_ID
    AND B.CLIENT_ID=P.CLIENT_ID
    AND P.TREAT_ID=T.TREAT_ID
    AND C.CLIENT_ID=@CLIENT_ID
END;

【问题讨论】:

  • 您是否检查过您的选择语句是否运行正常?
  • @DevelopmentIsMyPassion 是的

标签: sql database oracle stored-procedures


【解决方案1】:

这一定很傻,但我认为这是您声明变量@CLIENT_ID的方式

您是否尝试过像这样DELCARE @CLIENT_ID VARCHAR2(6) 声明变量?

看这个链接How to use local variables in stored procedures?

【讨论】:

    【解决方案2】:

    像下面这样试试

    CREATE PROCEDURE SPBILL (CLIENT_ID VARCHAR2)
    AS 
    BEGIN
       SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST) AS INVOICE
       FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
       WHERE C.CLIENT_ID=B.CLIENT_ID
       AND R.ROOM_ID=B.ROOM_ID
       AND B.CLIENT_ID=P.CLIENT_ID
       AND P.TREAT_ID=T.TREAT_ID
       AND C.CLIENT_ID= CLIENT_ID 
    END;
    

    【讨论】:

    • 数据库中Client_id的类型是什么?
    • @user3112130 如果删除最后一个 AND 子句 AND C.CLIENT_ID= CLIENT_ID 然后再次尝试创建 proc 会发生什么情况
    • @user3112130 也尝试删除 CLIENT_ID VARCHAR2(6) 并再次创建 proc
    • 你甚至可以创建一个只包含一个 select 语句的简单过程吗?你确定你的查询没有抛出任何错误吗?
    • @DevelopmentIsMyPassion 参数不应该有(6),这仅用于变量声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2012-05-25
    相关资源
    最近更新 更多