【问题标题】:How to call a SQL function inside package body of another function如何在另一个函数的包体内调用 SQL 函数
【发布时间】:2013-11-18 07:45:16
【问题描述】:

我有一个包裹体,如下所示。我需要在函数体内调用一个名为 TESTING() 的函数并调用另一个查询。代码如下

CREATE OR REPLACE PACKAGE BODY TEST_PCAKAGE AS  -- body
  FUNCTION OUTER_FUNCTION (
    INPUT_A  IN VARCHAR2,
    INPUT_B  IN DATE,
  ) RETURN REF_CURSOR_TYPE  IS
    CUR_CA_RECEIPTS REF_CURSOR_TYPE;
  BEGIN
     OPEN CUR_CA_RECEIPTS FOR
       TESTING();
         SELECT * FROM TEST_TABLE;
         RETURN CUR_CA_RECEIPTS;
       END OUTER_FUNCTION;
END TEST_PCAKAGE ; 

在创建这个包体时,它给了我错误。谁能告诉我该怎么做?

错误:错误(14,1):PLS-00428:此 SELECT 语句中需要一个 INTO 子句

create or replace
FUNCTION           "TESTING" RETURN VARCHAR2
AS
BEGIN
  RETURN('SUCCESS');
END;

【问题讨论】:

  • 您收到了哪些具体错误?在调用 TESTING 后至少缺少分号:RESULT:=TESTING(INPUT_A, INPUT_B); 并且没有 END IF;声明
  • 我已经更新了这个问题。请立即查看

标签: sql oracle package sql-function


【解决方案1】:

我猜你正试图从函数中返回光标

试试这个:

CREATE OR REPLACE PACKAGE BODY TEST_PCAKAGE AS  -- body
  FUNCTION OUTER_FUNCTION (
    INPUT_A  IN VARCHAR2,
    INPUT_B  IN DATE,
  ) RETURN REF_CURSOR_TYPE  IS
    -- use sys_refcursor for dynamic cursors 
    CUR_CA_RECEIPTS sys_refcursor;
  BEGIN
     -- Open the cursor for a query and not a function
     OPEN CUR_CA_RECEIPTS FOR SELECT * FROM TEST_TABLE;
     -- i'm guessing this is for debug
     TESTING();
     -- you can now iterate it in a different procedure
     RETURN CUR_CA_RECEIPTS;
  END OUTER_FUNCTION;
END TEST_PCAKAGE ; 

【讨论】:

  • 出现错误:Error(17,1): PLS-00221: 'TESTING' is not an procedure or is undefined
  • 我不知道testing() 是什么……我认为这是您数据库中的一个功能。你到底想做什么?
  • 我已经编辑了问题并放置了测试功能。实际上我需要的是先调用 testing() 如果函数返回“成功”我想调用选择查询并返回数据
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2019-09-11
  • 2015-07-15
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多