为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1 企业版
【操作系统】:DM Database Server 64 V8
【CPU】:
【问题描述】*:返回下面房屋名称所有
CREATE OR REPLACE FUNCTION your_function_name()
RETURNS table (DX_12050_DXMC VARCHAR(255)) AS
BEGIN
RETURN SELECT DX_12050_DXMC FROM pt_dxsl_1604000002_12050 ;
END;
如果你需要返回的数据是一列多行的话,可以测试一下下面这个办法。
--创建固定类型的TABLE类型对象
CREATE OR REPLACE TYPE TT_STRING IS TABLE OF VARCHAR2(32767);
--创建函数,返回预定类型
CREATE OR REPLACE FUNCTION F_GETUSERTABLES
RETURN TT_STRING
AS
--声明结构变量
V_RET TT_STRING;
BEGIN
--查询结果通过 BULK COLLECT 方式赋值给结构变量
SELECT TABLE_NAME
BULK COLLECT INTO V_RET
FROM USER_TABLES;
RETURN V_RET;
END;
--调用函数,查看返回结果,注意返回结果的字段名默认为 COLUMN_VALUE
SELECT *
FROM TABLE(F_GETUSERTABLES);
如果你需要返回的是一列或多列,且可预知列名及列类型,可以试一下下面这个办法
--创建结构体,设置各列定义信息
CREATE OR REPLACE TYPE TP_TABLEINFO IS RECORD
(
OWNER VARCHAR2(128),
TABLE_NAME VARCHAR2(128)
);
--使用预定结构体创建TABLE类型对象
CREATE OR REPLACE TYPE TT_TABLEINFO IS TABLE OF TP_TABLEINFO;
--创建函数,返回结构体
CREATE OR REPLACE FUNCTION F_GETTABLEINFO
RETURN TT_TABLEINFO
AS
V_RET TT_TABLEINFO;
BEGIN
--查询结果通过 BULK COLLECT 方式赋值给结构变量
SELECT OWNER,TABLE_NAME
BULK COLLECT INTO V_RET
FROM ALL_TABLES;
RETURN V_RET;
END;
--调用函数,查看返回结果,返回结果的列结构信息与前面定义的结构体一致
SELECT *
FROM TABLE(F_GETTABLEINFO);
函数主要是用来处理单个数据值或者行记录的。但如果你确实需要这样做,可以使用游标来遍历表中的所有记录,并将结果存储在一个变量中返回。
下面是一个示例,可以提供一些参考思路
看看管道表函数是否能满足需求呢https://eco.dameng.com/document/dm/zh-cn/pm/dm8_sql-various-control.html