【问题标题】:Execute and test stored procedure in sql developer在sql developer中执行和测试存储过程
【发布时间】:2020-04-13 18:01:30
【问题描述】:

我不知道如何执行或测试这个过程。我是那个领域的新手。提前致谢。

表价格有 id、price、datePrice 和 productId。 Table Products 有 id、currentprice 和 name

        create or replace PROCEDURE "currentprice"
        (idproduct IN NUMBER) AS
        currentprice products.current_price%type;
        BEGIN
         SELECT price INTO currentprice 
         FROM prices
         WHERE productId=idprice AND datePrice=(select max(datePrice) FROM prices WHERE 
          productId=idprice AND datePrice<=SYSDATE);

          UPDATE products
          SET currentprice = currentprice 
          WHERE id=idproduct;
           END;

【问题讨论】:

  • 这能回答你的问题吗? How to execute an oracle stored procedure?
  • 不。执行后出现错误“找不到数据”
  • Oracle 错误通常以ORAPLSSP2 之类的代码开头。你是怎么称呼它的,整个错误信息是什么?如果没有为指定的idproduct 存储价格(或productId - 这是一个错字吗?),prices 的查询可能会失败并显示no data found
  • 好的。我以某种方式弄清楚我的错误在哪里。我成功完成了 PL/SQL 程序。现在我需要对此进行测试。

标签: sql oracle oracle-sqldeveloper


【解决方案1】:
Begin
 "currentprice"(1);
End;
/

Commit;

在 SQL Developer 中使用 F5 执行,然后查询表数据以查看新价格。

我建议您将程序重命名为 currentprice - 没有引号...您会为自己省去很多麻烦。

您还可以浏览到 SQL Developer 中的过程并将其打开,然后使用“执行”按钮。

【讨论】:

    【解决方案2】:

    我重命名了程序 - 没有引号。再次找不到数据。

    我有调用该过程的触发器

         create or replace TRIGGER currentprice2
           AFTER INSERT OR UPDATE OR DELETE ON Prices
           DECLARE
           s NUMBER:=priceproduct.id;
           BEGIN
            currentprice(s);
           END;
    

    另外,我有包裹。也许我在包参数 id 上弄错了。

          create or replace PACKAGE priceproduct IS
          id products.id%TYPE;
          END priceproduct;
    

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 2023-03-04
      • 2011-05-07
      • 2011-04-28
      • 1970-01-01
      • 2021-12-01
      • 2013-12-09
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多