问题标签 [hana-sql-script]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
stored-procedures - 当您有多个架构时,如何在存储过程中使用架构映射?
我的 HANA 数据库上有一个存储过程,我需要在其中连接来自不同模式的两个表。这些模式在开发、登台和生产系统中的名称不同。
在这种情况下,显而易见的解决方案是使用Schema-Mapping。但不幸的是,模式映射似乎只适用于存储过程的默认模式。当尝试在存储过程(例如JOIN "AUTHORING_SCHEMA"."SOME_TABLE" ON ...
)中引用创作模式时,您会收到错误消息“无效的模式名称”。所以看起来我只能对其中一个表使用模式映射,但不能同时对这两个表使用。
我知道我可以通过查询表来读取存储过程中的模式映射"_SYS_BI"."M_SCHEMA_MAPPING"
,但是当我在变量中有模式名称时,我无法找到如何从模式中查询。
hana - 在 HANA 上向 SQLScript 结果添加一列
我面临以下问题:
我有桌子
- A 与列:[ID,名称]
- B 列:[ID,名称]
现在我想将这两个表与表结果 C 合并:
C 列 [ID, Name, Source]
表 C 中的 Source 列将显示值“A”或“B”,以说明该行的来源来自表 A 或 B。
我尝试了一些指南
(SELECT *, "A" AS SOURCE FROM A) UNION ALL (SELECT *, "B" AS SOURCE FROM B)
但它似乎仍然是错误的!
注意:这适用于 SAP HANA。我现在能怎么办?
sql - SQL 上限,连续求和
假设一个时间序列,其中每个时间点都有一个值。我必须通过计算当前值 + 前一个值的总和来计算连续总和。然而,棘手的部分是,总和应该有上限,因此不能超过某个值。
示例:总和上限为 +2。
例如,第 4 行的“上限总和”是使用前一行“2”中的“上限总和”并加上当前值来计算的。由于结果是 < 2,我们可以按原样取值。
问题是,使用 HANA,我不能在“上限总和”字段上使用 LAG/Window 函数。它会给我一个“未知列”错误。
任何想法如何在不使用 for 循环的情况下在 SQL/HANA SQL 脚本中解决这个问题(这会很慢)?
hana - HANA - 将字符串变量传递到 SQL 脚本中的 WHERE IN() 子句
假设我在脚本计算视图中有一些 SQL 脚本,该脚本采用单个值输入参数并为另一个计算视图中的输入参数生成多个输入字符串。
这按预期工作。但是,如果我更改var_out
查询并尝试在 where 子句中使用变量
视图将激活,但我没有从查询中得到任何结果。没有运行时错误,只是一个空的结果集。当我手动将值传递给WHERE IN()
子句时,一切正常。这似乎是一个基本问题,但我似乎无法让它发挥作用。我什至尝试使用char(39)
而不是''''
在我的连接表达式中,但没有香蕉:(
casting - 如何在 select 子句中高效地转换表达式
我有一个表,想根据条件将十进制类型的列转换为整数。我需要尽可能高效地执行此操作。
我当前工作的查询如下所示:
select *, (case when C_CUSTKEY < 20 then 1 else 0 end) as bit
from TPCH.CUSTOMER
但是我正在努力改善这一点。是否可以即时进行转换,例如:
select *, cast((C_CUSTKEY < 20) as integer) as bit
from TPCH.CUSTOMER
或者甚至是更简单的版本,例如:
select *, (C_CUSTKEY < 20) as bit
from TPCH.CUSTOMER
无论我使用什么功能,我总是会收到以下错误:
sql syntax error: incorrect syntax near "<"
更新 1
因此,为了更好地理解我想要做的实际用例如下:
select ( (case when col1 < x then 1 else 0 end)
+ (case when col2 > y then 2 else 0 end) ) as bitset
from TPCH.CUSTOMER
通常可以有大量的“case when”表达式(>100)。
- 现在第一个问题是表达式非常慢,我需要提高性能,所以我想知道它是否可以像这样进行即时转换,
2 * to_int(col2 > y)
但我找不到这样做的方法。 - 第二个问题是当我有很多“case when”表达式时,我会收到以下错误:
SQL internal parse tree depth exceeds its maximum: parse tree depth exceeds its maximum:255
hana - 如何从HANA unix时间戳字段中分别获取日期和时间到两列?
unix 时间戳值通过 MySQL DB 的数据服务传入 HANA。
但是,我可以使用以下语句找到日期,但想知道 SAP HANA 或数据服务设计器中是否有任何内置函数可以完成这项工作?还有什么方法可以从结果中获取时间,比如我们有 TO_DATE 日期,而不是 RIGHT()?
SELECT TO_VARCHAR (ADD_SECONDS( '1970-01-01 00:00:00', "1452261405"))
它将返回 2016-01-08 13:56:45
sql - HANA:如何在 RAND() 函数上设置种子?
我正在尝试修复HANA sqlscript中的RAND()函数生成的伪随机数。
我很确定这一定是可能的,但文档不是很明确。
谢谢你。
sql - Retrieving erring procedure name , error state , severity and line number in HANA
I have a stored procedure written in T-SQL. I am trying to write equivalent procedure in HANA. I am facing some roadblocks, which are :
- I am not able to find equivalent of ERROR_STATE(), ERROR_SEVERITY(), ERROR_PROCEDURE(), ERROR_LINE() functions in HANA. They are part of Transact SQL native error handling functions. I am aware of existence of ::SQL_ERROR_CODE and ::SQL_ERROR_MESSAGE. What are the corresponding system views/tables where they are defined.
- Equivalent of RETURN statement in HANA, which we can give before a CATCH block ends in T-SQL.
- Equivalent of BEGIN TRAN in HANA. TIA
sql - HANA 左外连接语法
我正在尝试使用左外连接在 HANA 中构建查询。我在 where 子句中使用 (+) 符号。我在 Oracle 中经常这样做;但在 HANA 中它返回一个语法错误。HANA 是否支持这种语法?