提问人:Cristina Biagiotti 提问时间:6/5/2023 最后编辑:OldProgrammerCristina Biagiotti 更新时间:6/5/2023 访问量:25
尝试从 Hana 转换为 Oracle 时出现错误 ORA-30076
Error ORA-30076 when trying to translate from Hana to Oracle
问:
我正在尝试将脚本从 Hana 转换为 Oracle,但在 Rule_def 上不断收到相同的错误。第 5 行的 DATEUPD,表示该字段对提取无效。 有人可以告诉我如何在 Oracle 中正确翻译该部分吗?谢谢!
SELECT
P2_RULE,
P2_ORIGIN,
Rule_def.DATEUPD as P2_DATE,
substr('0' || extract(hour from Rule_def.DATEUPD),2)
|| ':' ||
substr('0' || extract(minute from Rule_def.DATEUPD),2)
|| ':' ||
substr('0' || extract(second from Rule_def.DATEUPD),2) AS P2_DATETIME,
Rule_def.USERUPD || ' | ' || DESC_UTENTE as P2_USER
FROM (
SELECT
P2_RULE,
P2_ORIGIN,
DATEUPD,
USERUPD,
ROW_NUMBER() over (partition by P2_RULE, p2_origin order by DATEUPD desc) as N_row
FROM AW_PII_P20018_000001
WHERE dateupd is not null) Rule_def
join UTENTE
ON Rule_def.USERUPD = COD_UTENTE
WHERE N_ROW = 1
我尝试过一些日期的公式,但它们不起作用
答:
0赞
OldProgrammer
6/5/2023
#1
从 oracle 文档中,
如果请求 HOUR、MINUTE 或 SECOND,则 expr 的计算结果必须为 数据类型 TIMESTAMP、带时区的时间戳、时间戳的表达式 使用本地时区,或间隔日到秒。DATE 无效 这里,因为 Oracle Database 将其视为 ANSI DATE 数据类型,因此 没有时间字段。
因此,您需要将 DATE 字段的类型转换为 TIMESTAMP:
extract(hour from cast(Rule_def.DATEUPD as timestamp))
等,分和秒也
1赞
MT0
6/5/2023
#2
您似乎希望使用而不是复杂的格式:TO_CHAR
SUBSTR
SELECT r.P2_RULE,
r.P2_ORIGIN,
r.DATEUPD as P2_DATE,
TO_CHAR(r.DATEUPD, 'HH24:MI:SS') AS P2_DATETIME,
r.USERUPD || ' | ' || u.DESC_UTENTE as P2_USER
FROM ( SELECT P2_RULE,
P2_ORIGIN,
DATEUPD,
USERUPD,
ROW_NUMBER() over (
partition by P2_RULE, p2_origin order by DATEUPD desc
) as N_row
FROM AW_PII_P20018_000001
WHERE dateupd is not null
) r
join UTENTE u
ON r.USERUPD = u.COD_UTENTE
WHERE r.N_ROW = 1
其中,对于示例数据:
CREATE TABLE AW_PII_P20018_000001 (P2_RULE, P2_ORIGIN, DATEUPD, USERUPD) AS
SELECT 1, 2, SYSDATE, 3 FROM DUAL;
CREATE TABLE utente (desc_utente, cod_utente) AS
SELECT 'A', 3 FROM DUAL;
输出:
P2_RULE | P2_ORIGIN | P2_DATE | P2_DATETIME | P2_USER |
---|---|---|---|---|
1 | 2 | 2023-06-05 14:39:03 | 14:39:03 | 3 |一个 |
评论