1

我需要运行大型查询(这是 SP 的一部分)并查看它们的结果(只是试图在具有许多联合的大型 SP 中找到一个错误。我想将它分成几部分并单独运行)。如果这个 SP 的参数很少,我该怎么做?我不想在代码中替换它们,只需在带有此参数的硬代码的标头中添加声明就很好了。

我试过这样的事情:

DECLARE

p_asOfDate DATE :=  '22-Feb-2011';

BEGIN

SELECT * from myTable where dateInTable < p_asOfDate;

END

但它说我应该使用 INTO 关键字。如何在我的 IDE 中查看此结果?(我正在使用 Aqua 数据工作室)

我需要经常这样做,所以如果能找到一个简单的解决方案会很高兴

4

1 回答 1

1

您正在使用 pl/sql 代码的匿名块。在 pl/sql 过程中,您需要为结果指定目标变量。

因此,您首先需要在声明部分定义一个变量来保存结果,然后将结果数据插入其中。

DECLARE
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  select * into p_result from myTable where dateInTable < p_asOfDate;
END

也就是说,您可能会返回不止一行,因此我将使用游标分别获取行。

DECLARE
  CURSOR c_cursor (asOfDate IN DATE) is 
    select * from myTable where dateInTable < asOfDate;
  p_asOfDate DATE :=  '22-Feb-2011';
  p_result myTable%ROWTYPE;
BEGIN
  OPEN c_cursor(p_asOfDate);
    loop
      FETCH c_cursor into p_result;
      exit when c_cursor%NOTFOUND;
      /* do something with the result row here */
    end loop;
  CLOSE c_cursor;
END

要输出结果,您可以使用以下内容,例如:

dbms_output.put_line('some text' || p_result.someColumn);

或者,您可以在 sql 命令行(如 sqlplus)上执行查询并立即将结果作为表获取。

我希望我正确理解了你的问题......

更新

这是注入测试数据的另一种方法:

使用您的工具 sql 执行环境直接提交您的 sql 语句,无需 pl/sql 块。

在变量部分前面使用“&”来触发变量提示。

select * from myTable where dateInTable < &p_asOfDate;

结果应该以这种方式由您的工具以格式化的方式显示。我不了解 Aqua,但有些工具具有在 sql 代码之外定义这些参数的功能。

于 2011-02-21T12:08:12.867 回答