Sql 空输出将被下一个输出覆盖
代码的输出不应覆盖空值。 我需要在附加格式的输出(第一次输出),它是在不同的格式(第二次输出)显示。请建议我如何做到这一点Sql 空输出将被下一个输出覆盖,sql,oracle,plsql,Sql,Oracle,Plsql,代码的输出不应覆盖空值。 我需要在附加格式的输出(第一次输出),它是在不同的格式(第二次输出)显示。请建议我如何做到这一点 Customer_ID Event_ID Supp_CD (null) 2534660914 (null) (null) 2534660913 (null) 4000000000033919590 2534660916 (null) 7000000000491566892 2534660918
Customer_ID Event_ID Supp_CD
(null) 2534660914 (null)
(null) 2534660913 (null)
4000000000033919590 2534660916 (null)
7000000000491566892 2534660918 (null)
7000000000888215846 2534660917 (null)
7000000000945520325 2534660912 (null)
7000000000862996964 2534660919 (null)
7000000000554412111 2534660915 (null)
我已经编写了SQL脚本,但是DBMS_输出的格式覆盖了空输出。最后一个字段SUPP_CD是文本,前两列由数字组成
SET SERVEROUTPUT ON FORMAT WRAPPED
SET VERIFY OFF
SET FEEDBACK OFF
SET TERMOUT ON
SPOOL /u01/apps/Miscellaneous/bin/spool.txt
DECLARE
CSTID CDB_ADMIN.CPM_PREF_EVENT_STG.cdb_customer_id%TYPE;
EVNTID CDB_ADMIN.CPM_PREF_EVENT_STG.cdb_pref_event_id%TYPE;
SUPCD CDB_ADMIN.CPM_PREF_EVENT_STG.supp_cd%TYPE;
COUNTS INTEGER:=0;
cursor c1 is
<select * from A.B>;
BEGIN
DBMS_OUTPUT.PUT_LINE(LPAD('Customer_ID',25)||LPAD('Event_ID',25)||RPAD('Supp_ID',25));
OPEN C1;
LOOP
FETCH C1 INTO CSTID,EVNTID,SUPCD;
EXIT WHEN C1%NOTFOUND;
DBMS_OUTPUT.put_line(LPAD(CSTID,25)||LPAD(EVNTID,25)||RPAD(SUPCD,25));
COUNTS := COUNTS+1;
END LOOP;
CLOSE C1;
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('NUMBER OF ROWS: ' || COUNTS);
END;
/
SPOOL OFF;
输出是
Customer_ID Event_ID Supp_ID
2534660914
2534660914
2534660913
2534660913
4000000000033919590 2534660916
7000000000491566892 2534660918
7000000000888215846 2534660917
7000000000945520325 2534660912
7000000000862996964 2534660919
7000000000554412111 2534660915
还在想办法。请让我知道这是否可以用更好的方法来完成。您需要替换行:
DBMS\u输出。放置行(LPAD(CSTID,25)| | LPAD(EVNTID,25)| | RPAD(SUPCD,25))代码>如下所示,否则其他代码可以正常工作
DBMS_OUTPUT.PUT_LINE(
CASE
WHEN CSTID IS NULL AND EVNTID IS NULL THEN LPAD(SUPCD, 25)
WHEN CSTID IS NULL THEN
CASE
WHEN SUPCD IS NULL THEN LPAD(EVNTID, 25)
ELSE LPAD(EVNTID, 25)
|| RPAD(SUPCD, 25)
END
WHEN EVNTID IS NULL THEN
CASE
WHEN SUPCD IS NULL THEN LPAD(CSTID, 25)
ELSE LPAD(CSTID, 25)
|| RPAD(SUPCD, 25)
END
ELSE
CASE
WHEN SUPCD IS NULL THEN LPAD(CSTID, 25)
|| LPAD(EVNTID, 25)
ELSE LPAD(CSTID, 25)
|| LPAD(EVNTID, 25)
|| RPAD(SUPCD, 25)
END
END
);
希望这会有所帮助
DBMS_OUTPUT.PUT_LINE(RPAD('Customer_ID',20)||RPAD('Event_ID',20)||RPAD('Supp_ID',20));
DBMS_OUTPUT.PUT_LINE(
CASE
WHEN CSTID IS NULL AND EVNTID IS NULL THEN RPAD(SUPCD, 20)
WHEN CSTID IS NULL THEN
CASE
WHEN SUPCD IS NULL THEN RPAD(EVNTID, 20)
ELSE RPAD(EVNTID, 20)
|| RPAD(SUPCD, 20)
END
WHEN EVNTID IS NULL THEN
CASE
WHEN SUPCD IS NULL THEN RPAD(CSTID, 20)
ELSE RPAD(CSTID, 20)
|| RPAD(SUPCD, 20)
END
ELSE
CASE
WHEN SUPCD IS NULL THEN RPAD(CSTID, 20)
|| RPAD(EVNTID, 20)
ELSE RPAD(CSTID, 20)
|| RPAD(EVNTID, 20)
|| RPAD(SUPCD, 20)
END
END
);
END;
/
没有几个例子
干杯
------------
更新
------------
您可以使用以下DBMS\u输出
:
DBMS_OUTPUT.PUT_LINE(
CASE
WHEN CSTID IS NOT NULL THEN RPAD(CSTID, 20)
ELSE RPAD(' ', 20)
END
||
CASE
WHEN EVNTID IS NOT NULL THEN RPAD(EVNTID, 20)
ELSE RPAD(' ', 20)
END
||
CASE
WHEN SUPCD IS NOT NULL THEN RPAD(SUPCD, 20)
ELSE RPAD(' ', 20)
END
);
干杯 您可以使用合并
begin
dbms_output.put_line(LPAD('Customer_ID',25,'.')||LPAD('Event_ID',25,'.'));
dbms_output.put_line(LPAD(coalesce(null,' '),25,'.')||LPAD('2534660914',25,'.'));
end;
/
dbms\u输出:
..............Customer_ID.................Event_ID
........................ ...............2534660914
dbfiddle我试过了,但它仍然提供相同的输出。我们有什么办法可以通过if else解决这个问题吗?更新了答案。请检查。我在dbFiddle中检查了您的代码,在没有CSTID和SUPCD值为null的情况下,EVNTID值在Customer ID列下移动。哦,我的错!!我误解了这个要求。我已经用新的dbfiddle演示对我的答案进行了更新。请检查。我使用了coalesce,我修改的脚本以及上面部分的输出。请让我知道结果是否可以改进,您不需要使用if,您可以在一行dbms_输出中完成
@Christie我在dbfiddle中添加了一个示例,我在dbfiddle中尝试了它,它工作正常。但在我的代码中,它抛出的错误是ORA-06502-字符到数字的转换错误
DBMS_OUTPUT.PUT_LINE(
CASE
WHEN CSTID IS NOT NULL THEN RPAD(CSTID, 20)
ELSE RPAD(' ', 20)
END
||
CASE
WHEN EVNTID IS NOT NULL THEN RPAD(EVNTID, 20)
ELSE RPAD(' ', 20)
END
||
CASE
WHEN SUPCD IS NOT NULL THEN RPAD(SUPCD, 20)
ELSE RPAD(' ', 20)
END
);
begin
dbms_output.put_line(LPAD('Customer_ID',25,'.')||LPAD('Event_ID',25,'.'));
dbms_output.put_line(LPAD(coalesce(null,' '),25,'.')||LPAD('2534660914',25,'.'));
end;
/
..............Customer_ID.................Event_ID
........................ ...............2534660914