GBase 8s
适配迁移
问答

如何实现表值函数(函数返回table)

发表于2025-03-04 13:12:0087次浏览4个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:GBase8sV8.8_TL_3.5.1_3X2_x86_64

【操作系统】:centos7

【CPU】:虚拟机

【问题描述】*:

Gbase中如何实现表值函数的功能,如下文(SQL-server表值函数)。相关的语法说明?

CREATE FUNCTION [dbo].[Fun_TakeApartVarchar](@SourceSql varchar(8000),@StrSeprate varchar(10))
RETURNS @temp TABLE(ID int,Value varchar(100))
--实现将字符串通过指定字符进行拆分功能的函数
-- Date:2020-02-05
AS
BEGIN
    DECLARE @i int,@j int
    SET @SourceSql=rtrim(ltrim(@SourceSql))
    set @i=charindex(@StrSeprate,@SourceSql)
    SET @j=1
    WHILE @i>=1
    BEGIN
        INSERT @temp VALUES(@j,LEFT(@SourceSql,@i-1))
        SET @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
        SET @i=charindex(@StrSeprate,@SourceSql)
        SET @j=@j+1
    END
    IF @SourceSql<>''
        INSERT @temp VALUES(@j,@SourceSql)
    RETURN
END

评论

登录后才可以发表评论
用户头像
路路路发表于 1年前
稍等,我们马上查看
GBase用户12345发表于 1年前
和oracle类似,例如:
set environment sqlmode 'oracle';
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(50) UNIQUE NOT NULL,
hire_date DATE NOT NULL
);

CREATE OR REPLACE TYPE employee_obj AS OBJECT (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);

CREATE OR REPLACE TYPE employee_tab AS TABLE OF employee_obj;

CREATE OR REPLACE FUNCTION get_employees(dept_id IN NUMBER)
RETURN employee_tab PIPELINED IS
BEGIN
FOR emp IN (SELECT employee_id, first_name, last_name FROM employees WHERE department_id = dept_id) LOOP
PIPE ROW (employee_obj(emp.employee_id, emp.first_name, emp.last_name));
END LOOP;
RETURN;
END;
/

SELECT * FROM TABLE(get_employees(101));
最佳回答
GBase用户47954发表于 2个月前
感谢作者的精彩分享!
xinyiedc!发表于 2个月前
学习下。