小编Dav*_*itz的帖子

ORA-32795:无法插入生成的始终标识列

伙计们我试图在insert语句下面执行并且我一直收到错误:

无法插入生成的始终标识列

声明是:

INSERT INTO leaves_approval 
SELECT * 
FROM   requests_temp r 
WHERE  r.civil_number = 33322 
       AND r.request_id = (SELECT Max(s.request_id) 
                           FROM   requests_temp s)
Run Code Online (Sandbox Code Playgroud)

sql oracle identity-column oracle12c

8
推荐指数
2
解决办法
2万
查看次数

Oracle SQL:使用具有用户定义类型的LAG函数返回"不一致的数据类型"

我有一个MyType类型定义如下:

create or replace type MyType as varray(20000) of number(18);
Run Code Online (Sandbox Code Playgroud)

表MyTable定义如下:

create table MyTable (
   id       number(18) primary key
  ,widgets  MyType
)
Run Code Online (Sandbox Code Playgroud)

我试图使用以下SQL为MyTable中的每一行及其逻辑上前一行选择小部件:

select  t.id
       ,lag(t.widgets,1) over (order by t.id) as widgets_previous
from MyTable t
order by t.id;
Run Code Online (Sandbox Code Playgroud)

我收到了回复:

ORA-00932: inconsistent datatypes: expected - got MYSCHEMA.MYTYPE
Run Code Online (Sandbox Code Playgroud)

如果我使用varchar或number类型的列而不是MyType运行完全相同的查询,它可以正常工作.

当前行中的列类型及其上一行必须相同,因此我只能假设它与用户定义的类型相关.

我是否需要做一些特殊的事情来使用具有用户定义类型的LAG,或者LAG是否不支持用户定义的类型?如果是后者,是否有任何其他实用功能可以提供相同的功能,或者我需要做一个传统的自我联接以实现相同的功能?

sql oracle function user-defined-types

7
推荐指数
1
解决办法
324
查看次数

相同值的相同Row_Number

我需要行编号,其中ROW_NUMBER对于相同的值列是相同的:MFGPN(相同的MFGPN将始终按顺序).我还需要保留原始序列号.

这是我的桌子

No     MFGPN
1      Z363700Z01
2      Z363700Z01
3      0119-960-1
4      1A3F1-0503-01
Run Code Online (Sandbox Code Playgroud)

我尝试使用RANK()来实现所需但遇到麻烦.

SELECT RANK() OVER(ORDER BY MFGPN) As [Item], MFGPN FROM Table1 ORDER BY [No] ASC
Run Code Online (Sandbox Code Playgroud)

结果

Item   MFGPN           Desired Result
3      Z363700Z01            1
3      Z363700Z01            1
1      0119-960-1            2
2      1A3F1-0503-01         3
Run Code Online (Sandbox Code Playgroud)

感谢你们的专家建议.谢谢!

sql sql-server sql-server-2008

7
推荐指数
1
解决办法
6340
查看次数

HIVE中的DISTRIBUTE BY条款

我无法理解这个DISTRIBUTE BY子句在HIVE中的作用.我知道这个定义,如果我们有DISTRIBUTE BY(城市),这将使每个城市以不同的REDUCER发送,但我没有得到相同的结果.让我们考虑如下数据:

表数据:

+----------+--------+
| username | amount |
+----------+--------+
| user_1   | 25     |
+----------+--------+
| user_1   | 53     |
+----------+--------+
| user_1   | 28     |
+----------+--------+
| user_1   | 50     |
+----------+--------+
| user_2   | 20     |
+----------+--------+
| user_2   | 50     |
+----------+--------+
| user_2   | 10     |
+----------+--------+
| user_2   | 5      |
+----------+--------+
Run Code Online (Sandbox Code Playgroud)

假设我们有一个包含用户名数量列的TABLE数据.

现在,如果我说 -

select username,sum(amount) from data DISTRIBUTE by (name)
Run Code Online (Sandbox Code Playgroud)

这不应该运行2个单独的减速器吗?它还在运行一个减速机,我不知道为什么?我认为这可能与CLUSTERING INTO BUCKETS或PARTITIONING有关但我尝试了一切,仍然运行一个减速器可以解释为什么?

hive hiveql hadoop2

7
推荐指数
2
解决办法
2万
查看次数

如何按依赖顺序列出表(基于外键)?

这个问题最初是由@PrateekGupta提出的


背景

@PrateekGupta想要对多个表执行批量插入操作.
表格之间有外键关系.
如果在插入引用的表之前对具有外键的表执行INSERT操作,则操作可能由于违反外键而失败.

Reuierment

生成根据其依赖关系排序的数据库中的表列表.
没有依赖关系的表(没有外键)将是第1个.
仅在第1组表中具有依赖关系的表将是第2个.
仅在第1或第2组表中具有依赖关系的表将是第3个.
等等...

sql-server foreign-keys database-metadata

6
推荐指数
3
解决办法
3974
查看次数

AWS Athena从嵌套的JSON源中展平数据

我想从Athena的嵌套JSON创建一个表.这里描述的解决方案使用像hive Openx-JsonSerDe这样的工具尝试镜像SQL语句中的JSON数据.我只想从JSON文件中获取一些字段并创建表.我似乎无法找到任何有关如何做到这一点的资源.

例如JSON文件{"records": [{"a": "data1", "b": "data2", "c": "data3"}]} 我想创建的表只有列ab

hive amazon-web-services presto amazon-athena

6
推荐指数
1
解决办法
3366
查看次数

SQL挑战/难题:给定堆栈跟踪 - 如何在每个时间点找到顶部元素?

  • 我的真实用例是合并嵌套范围.我画了一些草图然后我看到范围开始和结束之间的相似性来叠加PUSH和POP操作.我明白解决这个问题也会解决原来的问题.

  • 柱实际上可以从问题中移除.当val为NULL时,它是POP操作,否则它是PUSH操作.

谜题

stack_trace包含以下列:

  • i - 表示某个时间点的整数值.
  • op - 2个可能的操作:I("in"/"push")和O("out"/"pop").
  • val - "in"/"push"操作插入的值或"out"/"pop"操作的NULL.

    目标是在每个时间点(i)找到堆栈顶部的值.

例如

(NULL值在此表示为空格)

数据:

i   op  val 
--  --  --  
1   I   A   
2   I   B   
3   O
4   I   C
5   O    
6   O   
Run Code Online (Sandbox Code Playgroud)

要求的结果:

i   top_of_stack_val
--  ----------------
1   A
2   B
3   A
4   C
5   A
6   
Run Code Online (Sandbox Code Playgroud)

要求

  • 解决方案应该是单个SQL查询(子查询很好).
  • 只允许使用以下子句:SELECT,FROM,WHERE,GROUP BY,HAVING, …

sql sql-server oracle hive teradata

5
推荐指数
1
解决办法
409
查看次数

SQL挑战/难题:如何合并嵌套范围?

  • 这一挑战基于涉及IP范围的现实生活用例.
  • 我带来的解决方案基于我之前介绍的堆栈跟踪挑战.每个范围开始被视为PUSH操作,每个范围结束+ 1被视为POP操作.

挑战

我们有一个范围数据集,其中每个范围都有一个起点,终点和一个值.

create table ranges
(
    range_start     int         not null
   ,range_end       int         not null
   ,range_val       char(1)     not null
)
;
Run Code Online (Sandbox Code Playgroud)

范围可以包含另一个范围或跟随另一个范围,但不能等于另一个范围或与另一个范围相交.

这些是范围之间的有效关系:

(1)           (2)           (3)           (4)
---------     ---------     ---------     -------- -----------
---                 ---        ---
Run Code Online (Sandbox Code Playgroud)

这些关系无效:

(5)                (6)
-------        --------       
-------              --------
Run Code Online (Sandbox Code Playgroud)

我们的初始范围,如果以图形方式显示,可能看起来像这样(字母代表range_val):

AAAAAAAA  BBCCCCCCC
 DDE   F   GGGGG
   H       IIII
             J
Run Code Online (Sandbox Code Playgroud)

目标是获取初始范围集并在以下规则下创建新集:

包含的范围将覆盖包含范围的相应子范围.

当以图形方式呈现时,请求的结果可能看起来像这样

ADDHAAAF  BIIJIGCCC
Run Code Online (Sandbox Code Playgroud)

要求

  • 解决方案应该是单个SQL查询(子查询很好).
  • 不允许使用T-SQL,PL/SQL等.
  • 不允许使用UDF(用户定义的函数).

数据样本

AAAAAAAAAAAAAAAAAAAAAAAAAAAA  BBBB    CCCCCCCCCCCCCCCCCCCCCCCCC …
Run Code Online (Sandbox Code Playgroud)

sql sql-server oracle hive teradata

5
推荐指数
1
解决办法
282
查看次数

如何在Hive CLI / Beeline中将textinputformat.record.delimiter重置为其默认值?

设置textinputformat.record.delimiter为非默认值,对于加载多行文本非常有用,如下面的演示所示。
但是,在不退出cli并将其重新打开的情况下,我无法将此参数设置回其默认值。

以下选项均无效(也没有其他一些试验)

set textinputformat.record.delimiter='\n';
set textinputformat.record.delimiter='\r';
set textinputformat.record.delimiter='\r\n';
set textinputformat.record.delimiter='
';

reset;
Run Code Online (Sandbox Code Playgroud)

任何想法?

谢谢

演示版

create table mytable (mycol string);
insert into mytable select concat('Hello',unhex('A'),'world');    
select concat('>>>',mycol,'<<<') as mycol from mytable;
Run Code Online (Sandbox Code Playgroud)

NewLine被解释为记录定界符,导致插入2条记录

+-------------+
|    mycol    |
+-------------+
| >>>Hello<<< |
| >>>world<<< |
+-------------+
Run Code Online (Sandbox Code Playgroud)
set textinputformat.record.delimiter='\0';

truncate table mytable;
insert into mytable select concat('Hello',unhex('A'),'world');    
select concat('>>>',mycol,'<<<') as mycol from mytable;
Run Code Online (Sandbox Code Playgroud)

整个文本作为单个记录插入

+----------+
|  mycol   |
+----------+
| >>>Hello |
| world    |
| <<<      |
+----------+
Run Code Online (Sandbox Code Playgroud)

试图将分隔符改回换行符 …

hadoop hive mapreduce hiveql

5
推荐指数
0
解决办法
1178
查看次数

T-SQL 生成 date 和 getdate 之间几周的行

我有以下数据样本:

ID 入境日期 目标日期
ID238 2022-09-06 2022-09-06
ID238 2022-09-06 2022-09-09
ID238 2022-09-06 2022-09-11
ID636 2022-09-30 2022-09-30
ID636 2022-09-30 2022-10-03
ID636 2022-09-30 2022-10-05

背景:在每个 ID 的第三个也是最后一个 TargetDate 之后,我需要生成截至今天日期的每周 TargetDate 行。

我想获取每个 Id 的最大目标日期,然后在该最大目标日期和 GETDATE() 之间的每个后续周添加新行。

理想的输出(粗体记录是我想要添加的行)-我知道原始目标日期不在我的查询中。我更专注于大胆的日期

ID 入境日期 目标日期
ID238 2022-09-06 2022-09-06
ID238 2022-09-06 2022-09-09
ID238 2022-09-06 2022-09-11
ID238 2022-09-06 2022-09-18
ID238 2022-09-06 2022-09-25
ID238 2022-09-06 2022-10-02
ID238 2022-09-06 2022-10-09
ID238 2022-09-06 2022年10月16日
ID238 2022-09-06 2022年10月23日
ID636 2022-09-30 2022-09-30
ID636 2022-09-30 2022-10-03
ID636 2022-09-30 2022-10-05
ID636 2022-09-30 2022年10月12日
ID636 2022-09-30 2022年10月19日 …

sql t-sql sql-server

5
推荐指数
1
解决办法
159
查看次数