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】:theResults
是CC_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 从带有函数的选择中创建文本数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Swing 应用程序的一系列选择中创建格式化的文本文件?