Oracle 12.1 从带有函数的选择中创建文本数据

Posted

技术标签:

【中文标题】Oracle 12.1 从带有函数的选择中创建文本数据【英文标题】:Oracle 12.1 Create text data from a select with a function 【发布时间】:2020-06-29 12:25:46 【问题描述】:

好的,大家好。所以我的项目很简单,但同时也很复杂。我需要在我的 Oracle 12.1 数据库中创建一个 SQL 过程,该过程将从外部客户端调用。由于我对 PLSQL 的了解有限,我编写了以下代码:

CREATE TYPE CC_DATA_RESPONSE is TABLE OF varchar2(1500);
CREATE FUNCTION getSearchResults(theSubject IN VARCHAR2, theTerm IN VARCHAR2)
   RETURN CC_DATA_RESPONSE
   IS
   theResults CC_DATA_RESPONSE;
BEGIN  
  SELECT DISTINCT column1, column2, column3
   BULK COLLECT INTO theResults
   FROM  myTable
   WHERE column1 > 1; 
        
   return theResults;
END;

BEGIN
 getSearchResults('BIO','202009');
END;

如您所见,我创建了一个名为 CC_DATA_RESPONSE 的新类型,这将是我的函数的最终结果类型。如果您查看 SELECT,我会使用 BULK COLLECT INTO theResults(我在那里收到警告)。然后,最后,我返回变量 theResults。

在底部,我有一个额外的块来调用该函数,以便我可以测试,但我收到一条错误消息,指出未声明 getSearchResults...我这样做对吗?

其他编译错误

[Warning] ORA-24344: success with compilation error
[Warning] ORA-24344: success with compilation error
68/4    PL/SQL: ORA-00947: not enough values
6/3     PL/SQL: SQL Statement ignored
 (5: 0): Warning: compiled but with compilation errors

我知道对于你们所有的大师来说,这些都是简单而愚蠢的问题......但是,请帮助!

【问题讨论】:

【参考方案1】:

theResultsCC_DATA_RESPONSE 类型,它是VARCHAR2(1500) 的表。

它可以保存表中包含VARCHAR2 数据类型的一列中的所有数据。

你的错误在这里:

SELECT DISTINCT column1, column2, column3 -- 3 columns here
   BULK COLLECT INTO theResults -- but this can hold only one column's data

应该是

SELECT DISTINCT column1 
   BULK COLLECT INTO theResults

SELECT DISTINCT column2
   BULK COLLECT INTO theResults

SELECT DISTINCT column3
   BULK COLLECT INTO theResults

更新:

逗号分隔值:

SELECT DISTINCT column1 || ',' || column2 || ',' || column3
   BULK COLLECT INTO theResults

【讨论】:

但是,如果我想将结果收集到以逗号或其他格式分隔的单个流中怎么办? 知道了。关于我的问题的最后一部分:如何在 Toad 中进行测试?我在底部添加了一个新的开始/结束块,但随后出现此错误:未声明 getSearchResults 在调用函数时,声明一个CC_DATA_RESPONSE 类型的变量,然后在开始块中为该变量分配一个函数,如`your_variable := your_function(..)`

以上是关于Oracle 12.1 从带有函数的选择中创建文本数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 中创建新闻提要 UI

如何从 Swing 应用程序的一系列选择中创建格式化的文本文件?

如何在qt4的文本编辑框中创建多个选择?

从 Oracle 12c 函数返回多个值

如何在 HTML/Javascript 中创建可编辑的组合框?

如何检索用于在 Oracle 中创建视图的 SQL?