当前位置 : 首页 » 互动问答 » 正文

SQL函数编译错误

分类 : 互动问答 | 发布时间 : 2018-04-27 17:04:54 | 评论 : 2 | 浏览 : 25 | 喜欢 : 0

我是SQL函数的新手。我正在尝试创建一个函数,如下所示
为以下SQL函数获取编译错误。
我错过了什么?

 FUNCTION CANCEL_ORDER(INPUT_ORDER_ID T_ORDER_PLACEMENT.ORDER_ID%TYPE)
返回号码

 如
 ord_id NUMBER;

开始

 将order_id从t_order_placement中选择到ord_id中,其中ORDER_ID = INPUT_ORDER_ID;

例外
 WHEN NO_DATA_FOUND THEN DBMS_OUT.PUT_LINE('NO_DATA_FOUND');
结束;

如果ord_id不是NULL,那么
 从t_order_details中删除ORDER_ID = INPUT_ORDER_ID
 返回1;
承诺;
万一;

例外
WHEN ord_id IS NULL THEN DBMS_OUT.PUT_LINE('ERROR');
结束;

即使对于该过程,我也会收到编译错误

 CREATE或REPLACE PROCEDURE GET_CUSTOMER_DETAILS(CUSTOMER_ID IN NUMBER,CUSTOMER_DETAILS OUT SYS_REFCURSOR)
    如
    开始
    OPEN CUSTOMER_DETAILS FOR
    从t_customer C选择C.CUST_ID,C.CUST_NAME,OP.ORDER_ID,SD.STOCK_NAME,OD.QUANTITY,t_order_placement OP,t_order_details OD,t_stock_details SD
    END GET_CUSTOMER_DETAILS;

回答(2)

  • 1楼
  • 在第二程序(PROCEDURE GET_CUSTOMER_DETAILS)中是“;”缺少

    创建或替换过程GET_CUSTOMER_DETAILS(CUSTOMER_ID为NUMBER,CUSTOMER_DETAILS OUT SYS_REFCURSOR)
        如
        开始
        OPEN CUSTOMER_DETAILS FOR
        从t_customer C,t_order_placement OP,t_order_details OD,t_stock_details SD中选择C.CUST_ID,C.CUST_NAME,OP.ORDER_ID,SD.STOCK_NAME,OD.QUANTITY;
        END GET_CUSTOMER_DETAILS;
  • 2楼
  • Missing BEGIN,在DELETE, DBMS_OUT should be 中使用外键> DBMS_OUTPUT 之后缺少分号,最后的异常不可能发生。考虑在选项 ON DELETE CASCADE .

    在过程中 - 在SELECT statement.

    函数cancel_order(input_order_id t_order_placement.order_id%type)之后缺少分号
        返回号码为
    
        ord_id号码;
    
    开始
    
        开始
            在ord_id中选择order_id
                来自t_order_placement
                where order_id = input_order_id;
        例外时,no_data_found
            DBMS_OUTPUT.PUT_LINE( 'NO_DATA_FOUND');
            返回0;
        结束;
    
        从t_order_details删除其中order_id = input_order_id;
    
         - 提交; -  < - 如果需要,在这里提交
    
        返回1;
    
    结束;

相关阅读: