Sql 加载到游标中的空值?

Sql 加载到游标中的空值?,sql,oracle,validation,plsql,cursor,Sql,Oracle,Validation,Plsql,Cursor,因此,我创建了两个游标来存储正在加载到表中的数据。数据一次加载一个,我需要对整个数据集进行验证,而不仅仅是单个记录。因此会有这样的数据(但同样,它只加载单个数据,而不是作为一个整体加载) 因此,游标将取和或每种类型,然后将其与不同的表号配对。然后在底部检查以确保每个表号始终有一个1和-1(即表号5155-55至少有一个类型1和一个类型-1) 输出是这样的 Distinct : 5155-55 SUM x: -2 SUM y: 1 ----------------------

因此,我创建了两个游标来存储正在加载到表中的数据。数据一次加载一个,我需要对整个数据集进行验证,而不仅仅是单个记录。因此会有这样的数据(但同样,它只加载单个数据,而不是作为一个整体加载)

因此,游标将取和或每种类型,然后将其与不同的表号配对。然后在底部检查以确保每个表号始终有一个1和-1(即表号5155-55至少有一个类型1和一个类型-1)

输出是这样的

 Distinct : 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:    -1
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:     0
 SUM y:     1
 ----------------------------
 ERROR MESSAGE
它非常有效,除非表单_no没有-1或1
输入示例:

form_no  |  type
---------------
5155-55  |  -1
5155-55  |  -1
5155-55  |   2
5155-55  |   1
         |
4568-98  |  -1
4568-98  |  -1
4568-98  |  -1
4568-98  |   2
4568-98  |   1 

3302-48  |   1
3302-48  |   2

请注意,表号3302-48没有-1。那么输出是这样的

 Distinct : 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:    -1
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:     0
 SUM y:     1
 ----------------------------
 ERROR MESSAGE
除了我希望它是这样

 Distinct : 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:    -1
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 GREAT JOB!
 Distinct: 5155-55
 SUM x:    -2
 SUM y:     1
 ----------------------------
 Distinct: 4568-98
 SUM x:    -3
 SUM y:     1
 ----------------------------
 Distinct: 3302-48
 SUM x:     0
 SUM y:     1
 ----------------------------
 ERROR MESSAGE

谁能告诉我怎么做。我不确定游标是否可以接受空值(即,如果没有1或-1,则将没有任何内容加载到游标中)。

实际上不需要涉及PL/SQL处理,只需使用SQL即可实现所需的结果:

SQL> select col
  2       , val
  3    from ( select form_no as "Distinct:"
  4                , to_char(sum(case when type1 = -1 then type1 else 0 end)) as sumx
  5                , to_char(sum(case when type1 = 1  then type1 else 0 end)) as sumy
  6            from t1
  7           group by form_no
  8         )
  9  unpivot(
 10     val for col in ("Distinct:", sumx, sumy)
 11   )
 12  ;
结果:

COL       VAL
--------- ----------
Distinct: 5155-55
SUMX      -2
SUMY      1

Distinct: 4568-98
SUMX      -3
SUMY      1

Distinct: 3302-48
SUMX      0
SUMY      1

9 rows selected 
注意Unpivot运算符,并在上述查询中仅用于数据格式化。如果您的Oracle版本早于11g,则可以使用PL/SQL进行子查询(在线视图)并根据需要格式化输出