Sql 向存储过程输入一个列表
我从R中得到一个元素列表,我必须从数据库中获得属于元素列表的记录 输入:Sql 向存储过程输入一个列表,sql,hana,Sql,Hana,我从R中得到一个元素列表,我必须从数据库中获得属于元素列表的记录 输入: '12345','23456', '34567', '45678' 程序: CREATE PROCEDURE "SCHEMA"."GET_RECORDS" (IN LIST (Type), OUT RECORDS tt_records) LANGUAGE SQLSCRIPT SQL SECURITY INVOKER READS SQL DATA AS BEGIN RECORDS =
'12345','23456', '34567', '45678'
程序:
CREATE PROCEDURE "SCHEMA"."GET_RECORDS" (IN LIST (Type), OUT RECORDS tt_records)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
RECORDS = select * from TABLE where ids in :LIST
END;
如何向proceudre提供这样的列表?使用用户定义的数据类型 首先创建一个用户定义的数据类型 数据库节点>可编程性>类型>用户定义的表类型 脚本:
CREATE TYPE dbo.MyTableType AS TABLE
(
ID INT
)
使用上述类型在过程中创建参数
CREATE PROCEDURE usp_InsertMessages
(
@MyParameter MyTableType READONLY
)
AS
BEGIN
INSERT INTO MyTable
(
id
)
SELECT
id
FROM @MyParameter
END
使用用户定义的数据类型 首先创建一个用户定义的数据类型 数据库节点>可编程性>类型>用户定义的表类型 脚本:
CREATE TYPE dbo.MyTableType AS TABLE
(
ID INT
)
使用上述类型在过程中创建参数
CREATE PROCEDURE usp_InsertMessages
(
@MyParameter MyTableType READONLY
)
AS
BEGIN
INSERT INTO MyTable
(
id
)
SELECT
id
FROM @MyParameter
END
将参数列表移交给SQLScript有点棘手,因为没有直接的本机构造 一种方法是使用
APPLY_FILTER
函数并将列表作为字符串参数“走私”
在我的示例中,我从表CUSERS
中读取,并为APPLY\u filter
创建一个过滤条件,该条件通过In()
子句过滤列USER\u ID
从列表中删除单引号('
)是为了避免在执行查询时进行隐式类型转换。保留单引号将使()中的子句make如下所示:
IN(“”,“”,“…)
而不是
(,…)中的
将数据从SAP HANA导出到R中的一种稍微舒适的方法是使用表类型的用户定义函数(UDF)。这里的主要区别在于调用语句是一个简单的SELECT
,结果就是这个SELECT
的结果集
CREATE function "FGET_RECORDS" (IN id_list VARCHAR(4000))
returns tt_cusers
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
declare _filter VARCHAR(4000);
_users = select * from cusers;
-- APPLY_FILTER expects a proper WHERE condition, so adding the column to filter
-- and the IN () expression is necessary.
--
-- the the id_list comes in with single quotes, let's remove those
_filter = 'USER_ID in (' || replace (:id_list, '''', '') ||')';
_result = APPLY_FILTER(:_users, :_filter);
RETURN :_result;
end;
select * from fget_records (? );
在R
(或任何其他客户端)中,确保在使用此构造时使用绑定变量。否则,处理不同的字符串引用机制可能会变得很麻烦
请参阅APPLY\u FILTER
上的文档,将参数列表移交给SQLScript有点棘手,因为没有直接的本机构造
一种方法是使用APPLY_FILTER
函数并将列表作为字符串参数“走私”
在我的示例中,我从表CUSERS
中读取,并为APPLY\u filter
创建一个过滤条件,该条件通过In()
子句过滤列USER\u ID
从列表中删除单引号('
)是为了避免在执行查询时进行隐式类型转换。保留单引号将使()中的子句make如下所示:
IN(“”,“”,“…)
而不是
(,…)中的
将数据从SAP HANA导出到R中的一种稍微舒适的方法是使用表类型的用户定义函数(UDF)。这里的主要区别在于调用语句是一个简单的SELECT
,结果就是这个SELECT
的结果集
CREATE function "FGET_RECORDS" (IN id_list VARCHAR(4000))
returns tt_cusers
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
declare _filter VARCHAR(4000);
_users = select * from cusers;
-- APPLY_FILTER expects a proper WHERE condition, so adding the column to filter
-- and the IN () expression is necessary.
--
-- the the id_list comes in with single quotes, let's remove those
_filter = 'USER_ID in (' || replace (:id_list, '''', '') ||')';
_result = APPLY_FILTER(:_users, :_filter);
RETURN :_result;
end;
select * from fget_records (? );
在R
(或任何其他客户端)中,确保在使用此构造时使用绑定变量。否则,处理不同的字符串引用机制可能会变得很麻烦
<文件>关于代码> Apple YouthFux .< /P>是的,它不是,我删除了标签,它是SAP HANAYEAH的语法,不是,我删除了标签,它是SAP HANAAN的语法,意思是,它把列表看作列吗?是的,它是列中的一个列,你确信这是SAP HANA的有效语法吗?不完全,列表需要一个类型,我想找到它。@jayasuryasathesh然后我必须创建一个tableín R。我需要一种方法来按原样处理列表。我没有编写一个新表的WordPrimeLiges。这意味着,它把列表看作一个列吗?是的,它将是表中的一个列。您确信这是SAP HANA的有效语法吗?不完全是,列表需要一个类型,我想找出它。@ JayasuryasathEx,然后我必须创建一个表In R。我需要一种方法来获取列表的方式。我没有写新表的权限。