【问题标题】:Software AG Designer doesn't ask for Input while running a PLSql ProcedureSoftware AG Designer 在运行 PLSql 过程时不要求输入
【发布时间】:2021-08-13 08:32:36
【问题描述】:

我正在尝试在 Software AG Designer 应用程序中运行 PLSql 程序,在将其作为服务运行时,它不要求输入。存储过程如下:

CREATE OR REPLACE PROCEDURE getProductDetails(productName VARCHAR, productResult SYS_REFCURSOR) AS

BEGIN
  OPEN productResult FOR
  SELECT product_count from product WHERE product_name = productName;
END;

我将程序调用如下:

SET SERVEROUTPUT ON
VAR rs REFCURSOR;

BEGIN
  getProductDetails('pendrive', :rs);
END;

print rs;

我的存储过程有什么问题吗?

请帮忙。谢谢。

【问题讨论】:

  • 我不知道“Software AG Designer”(实际上从未听说过)。您发布的代码应该可以在 SQL Plus 中运行。但是,你在说什么“输入”?您的代码中没有任何内容表明您应该被要求提供任何“输入”...过程接受一个 IN 参数并且您提供了它('pendrive',对吗?)。

标签: oracle plsql designer plsql-package


【解决方案1】:

它不应该要求输入。 (但是,您确实需要在 PL/SQL 块末尾的换行符上添加 /):

SET SERVEROUTPUT ON
VAR rs REFCURSOR;

BEGIN
  getProductDetails('pendrive', :rs);
END;
/

print rs;
  • 第 1 行只是告诉 Oracle,客户端希望接收输出到缓冲区的数据(而不是 Oracle 不与客户端共享输出时的默认值)。
  • 第 2 行声明了一个游标绑定变量。
  • 第 4 行开始一个匿名 PL/SQL 块。
  • 第 5 行调用您的过程,将 productNameIN 参数作为字符串文字 'pendrive'productResult 作为 rs 绑定变量传递。
  • 第 6 行结束匿名 PL/SQL 块。
  • 第 9 行打印绑定变量的值。

这些都不需要用户的任何输入。

但是,如果您问的是没有得到任何输出;那么可能是因为您希望productResult 成为OUT 参数(而不是IN):

CREATE OR REPLACE PROCEDURE getProductDetails(
  productName   IN  VARCHAR,
  productResult OUT SYS_REFCURSOR
)
AS
BEGIN
  OPEN productResult FOR
    SELECT product_count
    FROM   product
    WHERE  product_name = productName;
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多